【发布时间】:2016-01-30 10:25:45
【问题描述】:
我有一个数组:
$arr = [
['id'=>1, 'name'=>'Peter', 'age'=>28],
['id'=>1, 'name'=>'David', 'age'=>28],
['id'=>2, 'name'=>'John', 'age'=>34],
['id'=>3, 'name'=>'Smith', 'age'=>36],
['id'=>3, 'name'=>'Smith', 'age'=>28],
];
我想按列“id”过滤它,并合并不同的值。我需要输出:
$arr = [
['id'=>1, 'name'=>'Peter,David', 'age'=>28],
['id'=>2, 'name'=>'John', 'age'=>34],
['id'=>3, 'name'=>'Smith', 'age'=>'36,28']
];
是否有任何 PHP 函数(例如:array_filter、array_walk、array_map、...)可以做到这一点,而无需循环代码如下?
function combine_row($arr){
$last = null;
foreach ($arr as $key => $a){
if ($a['id']==$last['id']){
foreach ($a as $k=>$v) {
if($v!==$last[$k]) {
$arr[$key][$k].=','.$last[$k];
}
}
unset($arr[$key-1]);
}
$last = $a;
}
return $arr;
}
谢谢你帮助我!
【问题讨论】:
-
Phong,你解决了吗?让我知道我是否应该更改我的答案
-
对不起迈克尔,我没有回来查看你的答案,因为我找到了使用 Group_concat 从 mysql 步骤修复它的方法。不管怎样,你的回答太完美了。我将其标记为已接受的答案。谢谢!