Как я могу получить наибольшее число из двух многомерных массивов?

У меня есть два массива структура точно так же, только значения разные, как это ..

// $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
)
)

Цель состоит в том, чтобы создать один массив из обоих с максимальным значением «Value» и «Count» для каждого типа (Body Glass, Backlight).

Так должно выглядеть вот так …

// $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;
});
}

И также подводит меня к этой текущей проблеме.

0

Решение

У меня есть одно простое предложение для вас
-Первый получить все ключи в одном массиве, используя array_keys
Таким образом, вы получите массив, как это

$key_array = array(
[0] => 'Backlight'
[1] => 'Body Glass'
)
$final_array = [];
//than loop for key_array
foreach($key_array as $key=>$value){
//check condition if array1 count bigger than push array1 otherwise push array2 object
if($array1[$value]['Count']  > $array2[$value]['Count']){
$temp_array = $array1[$value];
if($array1[$value]['Value'] < $array2[$value]['Value'] ){
$temp_array['Value'] = $array2[$value]['Value'];
}
array_push($final_array,$temp_array);

}else{
$temp_array = $array2[$value];
if($array1[$value]['Value'] > $array2[$value]['Value'] ){
$temp_array['Value'] = $array1[$value]['Value'];
}
array_push($final_array,$temp_array);
}
}

Код для неизвестного номера массива

$key_array = array_keys($array1);
$final_array = [];
$total_array = [$array1,$array2,......,$arrayN];
$temp_array = $total_array[0];
//than loop for key_array
foreach($key_array as $key=>$value){

foreach ($total_array as $key=>$valueArr) {
if($key != 0){
// check condition if array1 count bigger than push array1 otherwise push array2 object
if($valueArr[$value]['Count']  > $temp_array[$value]['Count']){
$temp_array = $valueArr[$value];
if($valueArr[$value]['Value'] < $temp_array[$value]['Value'] ){
$temp_array['Value'] = $temp_array[$value]['Value'];
}
}else{
$temp_array = $temp_array[$value];
if($valueArr[$value]['Value'] > $temp_array[$value]['Value'] ){
$temp_array['Value'] = $valueArr[$value]['Value'];
}
}
}
}

array_push($final_array,$temp_array);
}
0

Другие решения

 private function summary($array, $key, $values = array()) {

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;
});
}

$finalSum = $sum[0];

// sort into arrays...
$sortArr = array();

foreach($sum as $sumArr) {
foreach($sumArr as $type => $typeArr) {
foreach($typeArr as $k => $v) {
if(in_array($k, $values)) {
$sortArr[$type][$k][] = $v;
}
}
}
}

// replace original array with highest values
foreach($sortArr as $type => $fieldArr) {
foreach($fieldArr as $fieldKey => $field) {
$finalSum[$type][$fieldKey] = max($sortArr[$type][$fieldKey]);
}
}

return $finalSum;
}
0

По вопросам рекламы [email protected]