2017-06-02 35 views
4

这里是我的多维数组:从多维数组获取最高价值

$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

你能帮助我吗?

+0

什么是电流输出? –

+0

我得到78.最后一个输出 –

回答

6

也许是这样的:瓦Galstyan评论后

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

编辑

$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); 
+0

如果数组是这样的东西? $ arrOrg = [2,3,array(5,7,1 ),100,[6,9,[14,95]],78]; –

+0

它会工作:) – sumit

+0

哦,好的))我误解了一些东西) –

2

您可以使用此函数,该函数。

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

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

<?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 
0

没有全局,修改阵列或做额外的转换:

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

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

但我想用这段代码给我的两个美分给这个问题。

$highest = null; 

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

echo $highest; 
+0

挑剔一点,但如果它是一个所有负数的数组呢? – MikeBergerUS

+0

谢谢你的问题。 – sensorario

1

您还可以通过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); 
+1

@BikashP Sumit当前接受的答案是一种怪异的解决方法,如果键值高于数组中的所有其他值,则_can_失败。出于这个原因,这个答案是最简洁,最聪明,最健壮的解决方案,只有两个函数,没有条件。 (+1)观看它不会突破Sumit的意愿:http://sandbox.onlinephpfunctions.com/code/663050c168bce42f5133e223011e5f2f3bc3ff7f – mickmackusa