【问题标题】:Array sum the same value of element?数组总和元素的相同值?
【发布时间】:2015-09-14 21:34:46
【问题描述】:

如何对数组求和相同的元素值?

$arr = [
   ['id' => 1, 'qty' => 100, 'name' => 'a'],
   ['id' => 1, 'qty' => 100, 'name' => 'a'],
   ['id' => 2, 'qty' => 100, 'name' => 'b']
];

成为:

$arr = [
   ['id' => 1, 'qty' => 200, 'name' => 'a'],
   ['id' => 2, 'qty' => 100, 'name' => 'b']
];

我尝试过但返回

[ 1=>['qty'=>200], 2=>['qty'=>100] ]

我尝试过但返回

for($i=0; $i<count($cok);$i++){
        $item_id = $cok[$i]['id'];
        $quantity = $cok[$i]['quantity'];
        if (isset($new_items[$item_id])) {
            $new_items[$item_id] = ['quantity' => $new_items[$item_id]['quantity'] + $quantity];
        } else {
            $new_items[$item_id] = ['quantity' => $quantity];
        }
    }

【问题讨论】:

标签: php


【解决方案1】:

简单如馅饼(:

<?php
$arr = array(
    array('id' => 1, 'qty' => 100, 'name' => 'a'),
    array('id' => 1, 'qty' => 100, 'name' => 'a'),
    array('id' => 2, 'qty' => 100, 'name' => 'b')
);

$new_arr = array();
foreach($arr AS $item) {
  if(isset($new_arr[$item['id']])) {
    $new_arr[$item['id']]['qty'] += $item['qty'];
    continue;
  }

  $new_arr[$item['id']] = $item;
}

$arr = array_values($new_arr);

var_dump($arr);

【讨论】:

    【解决方案2】:

    进入我的viper

    并且就地 sn-p,返回正是你需要的:

    <?
    $arr = array(
        array('id' => 1, 'qty' => 100, 'name' => 'a'),
        array('id' => 1, 'qty' => 100, 'name' => 'a'),
        array('id' => 2, 'qty' => 100, 'name' => 'b')
    );
    
    $ids = array();
    foreach ($arr as $i => $subarray) {
        if (!($remove_from_array = array_key_exists($subarray['id'], $ids))) {
            $ids[$subarray['id']] = 0;
        }
        $ids[$subarray['id']] += $subarray['qty'];
        if ($remove_from_array) {
            unset($arr[$i]);
        }
    }
    foreach ($arr as &$subarray) {
        $subarray['qty'] = $ids[$subarray['id']];
    }
    
    print_r($arr);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      相关资源
      最近更新 更多