我有一些像这样的数组:
array(
'id' => 1,
'title' => 'title1',
'name' => 'name1',
'count' => 2
)
array(
'id' => 1,
'title' => 'title1',
'name' => 'name2',
'count' => 3
)
array(
'id' => 2,
'title' => 'title2',
'name' => 'name1',
'count' => 2
)
我想合并它们,以便合并具有相同id
和title
的数组。结果应该是:
array(
'id' => 1,
'title' => 'title1',
'name' => array('name1', 'name2'),
'count' => array(2, 3)
)
array(
'id' => 2,
'title' => 'title2',
'name' => 'name1',
'count' => 2
)
或者
array(
'id' => 1,
'title' => 'title1',
'name' => 'name1, name2',
'count' => '2, 3'
)
array(
'id' => 2,
'title' => 'title2',
'name' => 'name1',
'count' => 2
)
或者
array(
'id' => 1,
'title' => 'title1',
'name1' => 2,
'name2' => 3
)
array(
'id' => 2,
'title' => 'title2',
'name1' => 2
)
array_merge_recursive()
会扩展所有键,而不是分组。 (所有数组也可以是对象的形式。)
原始问题
实际上它是来自MySQL数据库的查询结果,我使用COUNT
,GROUP BY
和JOIN
来生成上面的三个数组。由于所有MySQL查询都具有单行结构,并且查询结果不能包含子组类型,因此某些结果行具有相同的id
和title
。现在我想用PHP处理这些结果。
如果你有更好的想法,请写出来。
答案 0 :(得分:1)
这是代码
<?php
$data=array(array(
'id' => 1,
'title' => 'title1',
'name' => 'name1',
'count' => 2
),
array(
'id' => 1,
'title' => 'title1',
'name' => 'name2',
'count' => 3
),
array(
'id' => 2,
'title' => 'title2',
'name' => 'name1',
'count' => 2
));
$result=array();
foreach($data AS $item)
{
$key=$item['id'].'_'.$item['title'];
if(!isset($result[$key]))
{
$result[$key]=array(
'id'=>$item['id'],
'title'=>$item['title'],
'name'=>array(),
'count'=>array()
);
}
$result[$key]['name'][]=$item['name'];
$result[$key]['count'][]=$item['count'];
}
print_r($result);
这是结果
Array
(
[1_title1] => Array
(
[id] => 1
[title] => title1
[name] => Array
(
[0] => name1
[1] => name2
)
[count] => Array
(
[0] => 2
[1] => 3
)
)
[2_title2] => Array
(
[id] => 2
[title] => title2
[name] => Array
(
[0] => name1
)
[count] => Array
(
[0] => 2
)
)
)