php合并数组并且去重,php 二维数组去重合并的问题

有如下数组,希望以为其中一维数组相同字段合并,并且total字段相加。例子如下

array(4) {

[0]=>

array(2) {

["total"]=>

string(1) "1"

["name"]=>

string(4) "张三"

}

[1]=>

array(2) {

["total"]=>

string(1) "1"

["name"]=>

string(4) "张三"

}

[2]=>

array(2) {

["total"]=>

string(1) "3"

["name"]=>

string(4) "张三"

}

[3]=>

array(2) {

["total"]=>

string(1) "1"

["name"]=>

string(6) "李四"

}

}

期望去重合并后得到新数组:

array(2) {

[0]=>

array(2) {

["total"]=>

string(1) "5"

["name"]=>

string(4) "张三"

}

[1]=>

array(2) {

["total"]=>

string(1) "1"

["name"]=>

string(6) "李四"

}

}

有谁有好的算法么

$arr = array(

array(

'id'=>'1',

'name' => '张三'

),

array(

'id'=>'2',

'name' => '张三'

),

array(

'id'=>'1',

'name' => '李四'

)

);

$item = array();

foreach($arr as $k=>$v){

if(!isset($item[$v['name']])){

$item[$v['name']]=$v;

}else{

$item[$v['name']]['id']+=$v['id'];

}

}

echo ‘

’;

print_r(array_values($item));

我觉得可以参考桶排序的原理

已经解出来了,3个循环搞定,虽然复杂一点,但是貌似也没有更好的办法

$newArr = array();

$arr2 = array_column($arr, 'name');

$arr2 = array_unique($arr2);

$arr2 = array_values($arr2);

$i = 0;

foreach($arr2 as $a)

{

$newArr[$i]['name'] = $a;

$i ++;

}

foreach($arr2 as $k => $v){

foreach($arr as $mk =>$mv){

if($mv['name'] == $v){

$newArr[$k]['total'] += $mv['total'];

}

}

}

我是这么做的,我觉得 @maxin[maxin] 方法是好的

能力有限,想不出好的算法,我也只能想到循环,但是觉得不应该是最好的。

说说的我的想法,(也许有这么个情况)我觉得这种数组应该是数据库设计不合理,或者思路上拐了个弯导致的问题。

为什么不能在在数据库设计的时候,把它设计的合理一点,或许说把sql语句写得合理一点,后期处理数据也许并不高效。

期待大神来一个厉害的算法,关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值