我需要根据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。
我目前的步骤是遍历每个数组并添加唯一项目键的所有值。
我应该将所有数组加入/合并到一个大数组中,还是只能基于键递归执行?
感谢。
答案 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进行更有效。