2 cnory Cnory 于 2017.08.28 17:15 提问

【PHP】合并二维数组内指定的相同键并计算另一键的和后组成新的二位数组

array(4) {
  [0] => array(5) {
    ["id"] => int(1)
    ["order_num"] => string(11) "20170823-01"
    ["name"] => string(4) "4015"
    ["num"] => int(2000)
    ["time"] => int(1503590400)
  }
  [1] => array(5) {
    ["id"] => int(2)
    ["order_num"] => string(11) "20170823-02"
    ["name"] => string(4) "4015"
    ["num"] => int(3000)
    ["time"] => int(1503590400)
  }
  [2] => array(5) {
    ["id"] => int(3)
    ["order_num"] => string(11) "20170823-03"
    ["name"] => string(4) "4123"
    ["num"] => int(1000)
    ["time"] => int(1503590400)
  }
  [3] => array(5) {
    ["id"] => int(4)
    ["order_num"] => string(11) "20170823-04"
    ["name"] => string(4) "4123"
    ["num"] => int(1000)
    ["time"] => int(1503590400)
  }
}

原始数组如上
需要将 ["name"] 相同的合并到一起,且所对应的 ["num"]的值为原始数据中两个值的和
可能有多个相同["name"]
因为是新手,试了很多方法都没实现,想请教大牛们,应该怎么实现?
其他的键可以忽略

最终的结果是这种


array(4) {
  [0] => array(5) {
    ["name"] => string(4) "4015"
    ["num"] => int(5000)
        ["time"] => int(1503590400)
  }
  [1] => array(5) {
    ["name"] => string(4) "4123"
    ["num"] => int(2000)
    ["time"] => int(1503590400)
  }

}

2个回答

yi_an
yi_an   2017.08.29 19:53
已采纳

拿好不谢

$arr = [
    [
        'name'=>111,
        'sum'=>2
    ],
    [
        'name'=>111,
        'sum'=>3
    ],
    [
        'name'=>222,
        'sum'=>5
    ],
];
$tmp = [];
foreach ($arr as $v) {
    if(!isset($tmp[$v['name']])){
        $tmp[$v['name']]['name'] = $v['name'];
        $tmp[$v['name']]['sum'] = $v['sum'];
    }else{
        $tmp[$v['name']]['name'] = $v['name'];
        $tmp[$v['name']]['sum'] += $v['sum'];
    }
}
$out = array_values($tmp);
var_dump($out);

qq_23292875
qq_23292875   Rxr 2017.08.28 17:24

创建一个map 遍历二维数组拿到name值(作为map的key) 和num值(value) 每遍历拿到一组值的时候判断map中是否存在以这个name作为key的value值 如果不存在放入map 如果存在num相加后覆盖原有value

yi_an
yi_an 回复Cnory: $arr = [ [ 'name'=>111, 'sum'=>2 ], [ 'name'=>111, 'sum'=>3 ], [ 'name'=>222, 'sum'=>5 ], ]; $tmp = []; foreach ($arr as $v) { if(!isset($tmp[$v['name']])){ $tmp[$v['name']]['name'] = $v['name']; $tmp[$v['name']]['sum'] = $v['sum']; }else{ $tmp[$v['name']]['name'] = $v['name']; $tmp[$v['name']]['sum'] += $v['sum']; } } $out = array_values($tmp); var_dump($out);
11 个月之前 回复
Cnory
Cnory 可以麻烦把具体代码发一下吗?
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
PHP 二维数组中取一位数组某个值相同的数据 组成新的二维数组
// $arr = array(); $arrs = array ( [ '0'=>'基础信息', '1'=>'职业', '2'=>'医生', '3'=>'doctor', ], [ '0'=>'基础信息', '1'=>'职业', '2'=>...
PHP将二维数组某一个字段相同的数组合并起来的方法
这篇文章主要介绍了PHP将二维数组某一个字段相同的数组合并起来的方法,涉及PHP多维数组操作的相关技巧,需要的朋友可以参考下 本文实例讲述了PHP将二维数组某一个字段相同的数组合并起来的方法。分享给大家供大家参考,具体如下: 例子: array(3) { [0]=> array(16) { ["id"]=> string(2) "42" ["uid"]=>
php 数组分组 二维数组中,将某个键值相同的合并到一个数组中
//原数组 $arr    =   array (     0 => array         (             'initial' => 'A',             'typename' => '奥迪'         ),     1 => array         (             'initial' => 'F',
php 二维数组去重合并将相同数量累加
$arr = array( array( 'user_id' => 100, 'goods_id' => 10, 'number' => 1, ), array( 'user_id' => 102, 'goods_id' => 10, 'number' => 1, ),
PHP根据二维数组的某键值合并二维数组
<?php //需求:根据date字段的值将每天的type的pv、uv的数据放到一个维度里,目标数组仍为二维数组 //原始数组 $resource_array=array ( '0' => Array ( 'type' => 'hot_list', 'date' => '2016-07-18', '
php数组根据某一个键值,把相同键值的合并生成一个新的二维数组
php数组根据某一个键值,把相同键值的合并生成一个新的二维数组 源数据: $infos = array( array( 'a' => 36, 'b' => 'xa', 'c' => '2015-08-28 00:00:00', 'd' => '2015/
php将一个二维数组按照某个字段值合并成一维数组,如果有重复则将重复的合并成二维数组
最近工作中碰到一个问题,用PHP将一个二维数组按照二维数组中的各个项中的某个特定字段值合并成一维数组,如果有重复则将重复的合并成二维数组,生成的二维数组的第一维的键是特定字段的值,二维的键可以是随机索引,也可以是其中的另一个字段的值。其实这个需求经常会在工作中碰到,只是碰到的时候一个有重复的就直接用之前的覆盖后面的或者用之后的覆盖之前的,这样很容易就可以处理了。很少碰到这种有一维数组又有二维数组的
PHP让数组中有相同值的组成新的数组
$arr = array( 0=>array('key1'=>'value1' , 'key2'=>'value2'), 1=>array('key1'=>'value1' , 'key2'=>'value3'), 2=>array('key1'=>'value2' , 'key2'=>'value4'), 999=>array('key1'=>'value2' ,
javascript 把一个数组里面相同的数字组合成一个数组然后组成一个新的二维数组
定义两个数组: var arr = [a,2,a,1,2,b,b];//原数组 var arr2 = [];//新的二维数组定义两个方法,一个用来遍历原数组arr,将里面相同的内容作为一个数组返回,function _indexOf(a,arr){ var arr2 = []; for(var i=0;i&amp;lt;arr.length;i++){ if(arr[i]==a)...
php获取二维数组 某键的值 返回 新数组
//获取二维数组 某键的值 返回 新数组 function array_pluck($key, $array) {     if (is_array($key) || !is_array($array)) return array();     $funct = create_function('$e', 'return is_array($e) && array_key_exists(