Php 如何从两个多维数组中获取最大数?

Php 如何从两个多维数组中获取最大数?,php,multidimensional-array,numbers,highest,Php,Multidimensional Array,Numbers,Highest,我有两个数组,结构完全相同,只是值不同,如下 // $array1 Array ( [Backlight] => Array ( [Supply_Type] => Backlight [Value] => 100.00 [Count] => 2 ) [Body Glass] => Array ( [Supply_Type] => Body Glass

我有两个数组,结构完全相同,只是值不同,如下

// $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
    )
)
目标是为每种类型(车身玻璃、背光)从“值”和“计数”中创建一个具有最高值的数组

所以它应该是这样的

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

这也引出了我目前的问题。

我有一个简单的建议给你 -首先使用array\u key获取单个数组中的所有key 所以你们得到这样的数组

$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\u数组=数组(
[0]=>“背光”
[1] =>“车身玻璃”
)
$final_数组=[];
//密钥数组的than循环
foreach($key\u数组为$key=>$value){
//如果array1计数大于push array1,则检查条件,否则push array2对象
如果($array1[$value]['Count']>$array2[$value]['Count'])){
$temp_array=$array1[$value];
如果($array1[$value]['value']<$array2[$value]['value'])){
$temp_数组['Value']=$array2[$Value]['Value'];
}
数组推送($final数组,$temp数组);
}否则{
$temp_array=$array2[$value];
如果($array1[$value]['value']>$array2[$value]['value'])){
$temp_数组['Value']=$array1[$Value]['Value'];
}
数组推送($final数组,$temp数组);
}
}
数组数目未知的代码

$key\u数组=数组密钥($array1);
$final_数组=[];
$total_array=[$array1,$array2,…,$arrayN];
$temp_数组=$total_数组[0];
//密钥数组的than循环
foreach($key\u数组为$key=>$value){
foreach($key=>$valueArr的数组总数){
如果($key!=0){
//如果array1计数大于push array1,则检查条件,否则push array2对象
如果($valueArr[$value]['Count']>$temp_数组[$value]['Count'])){
$temp_数组=$valueArr[$value];
如果($valueArr[$value]['value']<$temp_数组[$value]['value'])){
$temp_数组['Value']=$temp_数组[$Value]['Value'];
}
}否则{
$temp_数组=$temp_数组[$value];
如果($valueArr[$value]['value']>$temp_数组[$value]['value'])){
$temp_数组['Value']=$valueArr[$Value]['Value'];
}
}
}            
}
数组推送($final数组,$temp数组);
}

您正在使用数据库吗?如果有,如果没有,那么你应该使用一个数据库。只需在数组上使用一个循环,在与其他数组进行比较之前捕获不同的值,并获得构建结果数组的最大值。你真的是说你有一个数组,其中满是具有
'Backlight'
'Body Glass'
属性的关联数组。。。或者你只是有单独的数组?你为什么不把数组1,数组2。。。分为4个数组,其中包含背光值、背光计数、主体类值、主体类计数,并从所有4个数组中获取最大值,以所需结构创建一个新数组。我无法访问数据库来查询此内容,是的,你是对的,我有一个数组,其中包含“背光”和“车身玻璃”属性的关联数组,直到我使用Array_reduce将它们相加并组合起来。如果需要更多帮助,请告诉我。对于未知数量的数组,这将如何工作,我希望有一种更简单的方法使用标准PHP函数,但是看起来没有。我已经更新了未知数组数量的答案。你能告诉我它是否工作吗?我真的很感谢你花时间和精力帮助我,但我现在已经完成了。不过谢谢,我已经发布了我所做的,以防对任何人有所帮助。
$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);
}
 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;
}