简体   繁体   English

在PHP数组中查找最大值

[英]Find maximum value in PHP array

Below is my array: 下面是我的数组:

Array
(
    [3] => Array
        (
            [2] => 3
            [4] => 1
            [5] => 2
            [6] => 2
        )

    [5] => Array
        (
            [2] => 1
            [3] => 2
            [4] => 3
            [6] => 3
        )

In this array I want to find the maximum number and if the array contains the same maximum values then we choose one maximum value randomly. 在这个数组中,我想找到最大数,如果数组包含相同的最大值,那么我们随机选择一个最大值。

Expected output like below: 预期产出如下:

Array
(
    [3] => Array
        (
            [2] => 3

        )

    [5] => Array
        (

            [4] => 3

        )

    [6] => Array
        (
            [2] => 3

        )

)

This is what I've tried: 这就是我尝试过的:

$found = Array( [3] => Array ( [2] => 3 [4] => 1 [5] => 2 [6] => 2 ) [5] => Array ( [2] => 1 [3] => 2 [4] => 3 [6] => 3 ) [6] => Array ( [2] => 3 [3] => 2 [4] => 2 [5] => 3 )) 
$fmaxnum = array(); 

foreach($found as $fk => $fv){ 
   $fmaxnum[$fk] = max($fv); 
} 
echo "<pre>";print_r($fmaxnum);echo "</pre>"

You will get max value with max() but for index you have to use array_keys() 您将获得max max()但是对于索引,您必须使用array_keys()

You can try this: 你可以试试这个:

$found = Array ( '3' => Array ( '2' => 3 ,'4' => 1, '5' => 2, '6' => 2 ),
                 '5' => Array ( '2' => 1 ,'3' => 2, '4' => 3, '6' => 3 ),
                 '6' => Array ( '2' => 3 ,'3' => 2, '4' => 2, '5' => 3 )
                );
$fmaxnum = array(); 
foreach($found as $fk => $fv){ 
    $max_key = array_keys($fv, max($fv));
    $fmaxnum[$fk] = array(
      ($max_key[0]) => max($fv) /* This will give small index value */  
      /* (count($max_key)-1) => => max($fv) // this will give highest index value */
    );
} 

echo "<pre>";
print_r($fmaxnum);
echo "</pre>";

Simple solution with array_map and array_keys functions: 使用array_maparray_keys函数的简单解决方案:

// supposing $arr is your initial array
$arrMax = array_map(function($v){
    $maximum = max($v);
    return  [array_keys($v, $maximum)[0] => $maximum];
}, $arr);

print_r($arrMax);

The output: 输出:

Array
(
    [3] => Array
        (
            [2] => 3
        )

    [5] => Array
        (
            [4] => 3
        )

    [6] => Array
        (
            [2] => 3
        )
)

if you just want to know the highest value as I understood 如果你只是想知道我理解的最高价值

In this array I want to find the maximum number and if the array contains the same maximum values then we choose one maximum value randomly. 在这个数组中,我想找到最大数,如果数组包含相同的最大值,那么我们随机选择一个最大值。

you could just do this 你可以这样做

$array = [['3','1','2','2'],['1','2','3','3'],['2','1','1','3']]; 
$result = []; 

foreach(new RecursiveIteratorIterator(new RecursiveArrayIterator($array)) as $value) {
    $result[] = $value;
}

echo max($result);  

this will foreach all the array and push the values on $result , then you just have one level array and easily use max function 这将预先处理所有数组并在$result上推送值,然后你只需要一个级别数组并轻松使用max函数

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM