2017-02-02 10 views
0

私は以下の配列を持っています $ ar3 = array(123、array(12、665、array(77、255、98、56)、8)、1155、676); と私は再帰の助けを借りてすべての要素を比較する必要があります。 それから、その要素を最大限見つけ出す必要があります。 私は最も深い配列の最大値を見つけることができた:多次元配列で最高値を見つける方法

$ar3 = array(123, array(12, 665, array(77, 255, 98, 56), 8), 1155, 676); 

function arr_max_rec($ar3) 
{ 
    $max = $ar3[0]; 
    foreach ($ar3 as $key => $value){ 
     if ($max < $ar3[$key] and !is_array($value)){ 
      $max = $ar3[$key]; 
     } 
     elseif (is_array($ar3[$key])){ 
      return arr_max_rec($ar3[$key]); 
     } 
    }return $max; 
} 
echo arr_max_rec($ar3); 

をしかし、私はすべての数字を比較して、最高のものを見つける必要があります。配列の深さはanyでもかまいません。あなたは再帰関数を使用して試すことができます

答えて

1

<?php 

    $ar3=array(123, array(12, 665, array(77, 255, 98, 56), 8), 1155, 676); 

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

     return max($ar3); 
    } 

    echo highestValue($ar3); //1155 
+1

代わりに 'sort'と' 'あなたが使用することができますarray_pop'のreturn max($ ar3); ' – antesoles

+0

@antesolesがコードを更新し、それもうまく動作しようとしました –

2

は次のように動作します:

<?php 

function arr_max_rec($ar3) 
{ //     \ 
    //     | 
    // /reduce the input array to a single value using 
    //  |    | 
    //  |    | /the given callback 
    //  |    | | 
    return array_reduce($ar3, function ($a, $b) { 
     //        /
     ///return the   ------- 
     // |     /
     // | /max value of $a, $b. But if $b 
     // | | 
     // | |  /is an array, recurse first 
     // | |  |    | 
     return max($a, is_array($b) ? arr_max_rec($b) : $b); 

    }, PHP_INT_MIN); 
} 

デモ:https://3v4l.org/OUsmH

+2

私はあなたがコードにコメントした方法が好きです。 –

+0

とても美しいコメント!ありがとうございました。 – Koiten

0
<?php 
$ar3 = array(123, array(12, 665, array(77, 255, 98, 56), 8), 1155, 676); 
$first = intval($ar3[0]); 
$min = '' ; 
$max = '' ; 
foreach($ar3 as $data) { 
    $array= intval($data); 
    if($array<= $min) { 
     $min = $array; 
    } 
    if($array> $max) { 
     $max = $array; 
    } 
} 
echo " max = $max \n " ; 
?> 

Live Demo

0
以下@Koiten

は、あなたの答えです 1以下に応じてコードを修正します

<?php 
    $ar3 = array(123, array(12, 665, array(77, 255, 98, 56), 8), 1155, 676); 
    function arr_max_rec($ar3){ 
     $max = $ar3[0]; 
     foreach($ar3 as $val){   
      if(!is_array($val) && $max < $val){ 
       $max = $val; 
      } 
      else if(is_array($val)){ 
       arr_max_rec($val); 
      } 
     } 
     return $max; 
    } 
    echo arr_max_rec($ar3); 
?> 

OUTPUT:1155

+0

申し訳ありませんが、動作していません。ちょうど255 - > 2255を変更しようとすると、表示されます。それでも1155が出力されます。 – Koiten

関連する問題