Php 循环遍历多维数组并向新数组添加值,同时以不同方式处理具有某些匹配值的元素
我有以下数组Php 循环遍历多维数组并向新数组添加值,同时以不同方式处理具有某些匹配值的元素,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有以下数组 Array ( [0] => Array ( [0] => Array ( [productCode] => HQ768H [startTimeLocal] => 2018-04-17 14:00:00 [endTimeLocal] => 2018-04-17 16:00:00 [totalQuantity] => 2
Array (
[0] => Array (
[0] => Array (
[productCode] => HQ768H
[startTimeLocal] => 2018-04-17 14:00:00
[endTimeLocal] => 2018-04-17 16:00:00
[totalQuantity] => 2
[amount] => 170
[extras] => Array ()
[transferReturn] =>
[subtotal] => 170
)
[1] => Array (
[productCode] => PLJ6HP
[startTimeLocal] => 2018-04-15 14:00:00
[endTimeLocal] => 2018-04-15 16:00:00
[totalQuantity] => 2
[amount] => 170
[extras] => Array ()
[transferReturn] =>
[subtotal] => 170
)
[2] => Array (
[productCode] => PLJ6HP
[startTimeLocal] => 2018-04-15 14:00:00
[endTimeLocal] => 2018-04-15 16:00:00
[totalQuantity] => 2
[amount] => 170
[extras] => Array ()
[transferReturn] =>
[subtotal] => 170
)
)
)
我正在尝试使用由productCode、startTimeLocal和totalQuantity组成的PHP创建另一个数组。。。但是如果两个或多个元素具有相同的productCode和相同的startTimeLocal,我需要通过添加新值而不是添加新的数组元素来更新totalQuantity
我唯一能想到的代码是一长串嵌套的foreach循环,它们根本无法执行我需要的操作。我对此相当陌生。如果有人能帮我或给我指出正确的方向,我将非常感激。谢谢
下面是我想要达到的目标
Array (
[0] => Array (
[0] => Array (
[productCode] => HQ768H
[startTimeLocal] => 2018-04-17 14:00:00
[totalQuantity] => 2
)
[1] => Array (
[productCode] => PLJ6HP
[startTimeLocal] => 2018-04-15 14:00:00
[totalQuantity] => 4
)
)
)
可以通过循环使用旧数组来实现这一点。然后添加一个新数组作为元素(如果它还不存在)。否则,只需向现有元素添加
totalQuantity
$new_array = [];
foreach ($array as $inner_array)
foreach ($inner_array as $element) {
//check if already in $new_array and get index
$index = -1;
for ($i = 0; $i < count ($new_array); $i++)
if ($new_array[$i]['productCode'] == $element['productCode'])
if ($new_array[$i]['startTimeLocal'] == $element['startTimeLocal'])
$index = $i;
//check if it was found
if ($index == -1) {
//if not add to $new_array
$new_array[] = [
'productCode' => $element['productCode'],
'startTimeLocal' => $element['startTimeLocal'],
'totalQuantity' => $element['totalQuantity']
];
} else {
//otherwise increase totalQuantity
$new_array[$index]['totalQuantity'] += $element['totalQuantity']
}
}
$new_数组=[];
foreach($array作为$internal\u数组)
foreach($内部数组作为$元素){
//检查是否已在$new_数组中并获取索引
$index=-1;
对于($i=0;$i$element['productCode'],
'startTimeLocal'=>$element['startTimeLocal'],
'totalQuantity'=>$element['totalQuantity']
];
}否则{
//否则增加总量
$new_数组[$index]['totalQuantity']+=$element['totalQuantity']
}
}
如果您想先得到答案,请接受某人对您的帖子所做的编辑。。。因为在它当前的形式下,它是不可读的,你能不能也做一个示例数组,你希望结果是什么样子的?谢谢,我认为这是我需要的。目前我得到了以下结果,但并不确定为什么。。。数组([]=>Array([startTimeLocal]=>[totalQuantity]=>0)[v]=>Array([startTimeLocal]=>v[totalQuantity]=>v])此外,我认为这可能只检查productCode匹配情况。。。我如何检查productCode和startTimeLocal是否匹配(两者都必须匹配)?@JasonWhalan抱歉,我没有看到。我更新了我的答案以满足您的需要。希望能有帮助。像你这样的人正在保持互联网的运转。非常感谢,我真的很感激,在来这里之前我花了好几天的时间试着这么做。再次感谢。