PHP - 多维数组添加

时间:2015-12-29 21:55:31

标签: php arrays multidimensional-array

我需要根据item_id在多维数组中添加所有值。我的代码:

$result = $db->test_order();

/**
 * @array $result   = all menuitems from query
 * @array $newArray = new array without any empty arrays
 */
foreach ($result as $r => $i){
  if (!empty($i['Customizations'])){
    $newArray[] = $i;
  }
}

/**
 * @array $decoded_array = new, multi-dimentional, array with item_id as KEY and qty as VALUE
 */
foreach ($newArray as $r => $i) {
  $a = trim($i['Customizations']);
  $decoded_array[] = json_decode($a, TRUE);
}

var_dump($decoded_array);

输出:

array (size=18545)
  0 => 
    array (size=7)
      5 => string '1' (length=1)
      73 => string '1' (length=1)
      54 => string '1' (length=1)
      63 => string '1' (length=1)
      87 => string '1' (length=1)
      64 => string '1' (length=1)
      34 => string '1' (length=1)
  1 => 
    array (size=7)
      70 => string '1' (length=1)
      45 => string '1' (length=1)
      48 => string '1' (length=1)
      49 => string '1' (length=1)
      8 => string '1' (length=1)
      52 => string '1' (length=1)
      93 => string '1' (length=1)
  2 => 
    array (size=2)
      33 => string '1' (length=1)
      90 => string '1' (length=1)
  3 => 
    array (size=6)
      5 => string '1' (length=1)
      27 => string '1' (length=1)
      8 => string '1' (length=1)
      104 => string '1' (length=1)
      52 => string '1' (length=1)
      56 => string '1' (length=1)
  4 => 
    array (size=1)
      108 => string '1' (length=1)
  5 => 
    array (size=6)
      5 => string '2' (length=1)
      70 => string '3' (length=1)
      8 => string '1' (length=1)
      71 => string '1' (length=1)
      52 => string '3' (length=1)
      6 => string '1' (length=1)

数组的结构是item_ID => QTY_Ordered。

我目前的步骤是遍历每个数组并添加唯一项目键的所有值。

我应该将所有数组加入/合并到一个大数组中,还是只能基于键递归执行?

感谢。

1 个答案:

答案 0 :(得分:0)

看起来它只是二维的,所以递归可能不是必需的。你可以做一个双foreach来获得总数。

$totals = array();

foreach ($decoded_array as $order) {
    foreach ($order as $item_id => $quantity) {
        if (isset($totals[$item_id])) {
            $totals[$item_id] += $quantity;
        } else {
            $totals[$item_id] = $quantity;
        }
    }
}

根据您在问题中所说的内容,这可能就像您已经在做的那样,但这是我将使用的方法。我没有看到将所有阵列加在一起会有很多好处。

另一方面,如果所有这些值都来自您的数据库,我认为编写查询来计算总数而不是使用PHP进行更有效。