我有两个数组,结构完全相同,只是值不同,就像这样..
// $array1
Array
(
[Backlight] => Array
(
[Supply_Type] => Backlight
[Value] => 100.00
[Count] => 2
)
[Body Glass] => Array
(
[Supply_Type] => Body Glass
[Value] => 100.00
[Count] => 82
)
)
// $array2
Array
(
[Backlight] => Array
(
[Supply_Type] => Backlight
[Value] => 200.00
[Count] => 1
)
[Body Glass] => Array
(
[Supply_Type] => Body Glass
[Value] => 150.00
[Count] => 90
)
)
目标是为每种类型(Body Glass、Backlight)从“Value”和“Count”中创建一个具有最高值的数组。
所以它应该看起来像这样......
// $finalArray
Array
(
[Backlight] => Array
(
[Supply_Type] => Backlight
[Value] => 200.00
[Count] => 2
)
[Body Glass] => Array
(
[Supply_Type] => Body Glass
[Value] => 150.00
[Count] => 90
)
)
由于可能有两个以上的数组,我想我可以用 array_uintersect 做到这一点,但据我所知,通过反复试验,这只返回一个数组中的值并与其余数组进行比较,感觉也许我'我走错了路。
我只是想我会添加这个。
使用array_reduce时问题开始了,我需要将数组中两个值(“value”和“count”)的值相加,理想情况下我只想写......
$sum = array_reduce($array, function ($a, $b) use($key) {
isset($a[$b[$key]]) ? $a[$b[$key]]["Value"] += $b["Value"] : $a[$b[$key]] = $b;
isset($a[$b[$key]]) ? $a[$b[$key]]["Count"] += $b["Count"] : $a[$b[$key]] = $b;
return $a;
});
但是第二个赋值没有正确加起来,如果我没记错的话,它是把第一个数组值加了两次。
所以我解决了这个创建两个或更多数组的问题......
foreach($values as $value) {
$sum[] = array_reduce($array, function ($a, $b) use($key, $value) {
isset($a[$b[$key]]) ? $a[$b[$key]][$value] += $b[$value] : $a[$b[$key]] = $b;
return $a;
});
}
也让我想到了这个当前的问题。