2017-06-02 65 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