繁体   English   中英

从多维数组中获取最高价值

[英]Get highest value from multidimensional array

这是我的多维数组:

$arrOrg = [2, 3, [5, 7, 1], 100, [6, 9, [14, 95]], 78];

我想从这个数组中获得最高价值。

这是我到目前为止所尝试的:

$highest = 0;
function getHighest($arr) {
    for ($i = 0; $i < count($arr); $i++) {
        if (is_array($arr[$i])) {
            getHighest($arr[$i]);
        } else {
            if ($arr[$i] > $arr[$i + 1]) {
                $highest = $arr[$i];
            } else {
                $highest = $arr[$i + 1];
            }
        }
    }
    return $highest;
}
echo getHighest($arrOrg);

但它给出的结果不正确: 78

你能帮我吗?

也许是这样的:

$arrOrg = [2, 3, [5, 7, 1], 100, [6, 9, [14, 95]], 78];
$json   = json_encode($arrOrg);
$json   = str_replace(array('[', ']'), "", $json);
$arr    = explode(",", $json);

echo $maximum = max($arr);

在Vahe Galstyan评论之后编辑

$arrOrg = array(
    2, 
    3,
    array(5, 7, 1), 
    100,
    array(
        6, 
        9, 
        array(14, 95)
    ), 
    78
);

$json = json_encode($arrOrg);
$json = str_replace(array('[', ']'), "", $json);
$arr  = explode(",", $json);

echo $maximum = max($arr);

您可以使用此功能。

  function getHighest($array) {
       foreach($array as $key => $value) {
           if (is_array($value)) {
               $array[$key] = getHighest($value);
           }
       }

       sort($array);

       return array_pop($array);
    }

    echo getHighest($arrOrg);

没有全局变量,修改数组或进行额外的转换:

funcion getMax ($arr) {
    $max = null;
    foreach ($arr as $act) {
        if (is_array ($act)) {
            $act = getMax ($act);
        }
        if ($max == null || act > $max) {
            $max = $act;
        }
    }
    return $max;
}

我认为将数组转换为json,...删除“[”和“]”,然后将字符串重新转换为数组不是查找最大值的算法。 无论如何,...在PHP中它的工作原理。 几行。 我认为这是一个非常漂亮的解决方案^ _ ^。

但是我想用这段代码给这个问题两分钱。

$highest = null;

array_walk_recursive($arrOrg, function($item, $key) use (&$highest) {
    if (!isset($highest) || $highest < $item) {
        $highest = $item;
    }
});

echo $highest;

你也可以通过array_walk_recursive()和max()来实现它,如下所示检查输出https://eval.in/809971

<?php
   $arrOrg = [2, 3, [5, 7, 1], 100, [6, 9, [14, 95]], 78];
   $oneD = array();
   array_walk_recursive($arrOrg,function ($a) use (&$oneD){
        $oneD[] = $a;

   });
   echo "Maximum value = ".max($oneD);

您可以使用此方法执行此操作。

<?php

$array = [2, 3, [5, 7, 1], 100, [6, 9, [14, 95]], 78];
$highest_value=0;
get_highest_value($array);
function get_highest_value($array){
    foreach($array as $val){
        if(is_array($val)){
            get_highest_value($val);
        }else{
            if($GLOBALS['highest_value'] < $val){
                $GLOBALS['highest_value'] = $val;
            }
        }
    }
}
echo $highest_value; // output 100

暂无
暂无

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

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