PHP – использование рекурсивной функции для поиска max () вложенных массивов

Следующий код использует простую стратегию для поиска макс вложенного массива. Он использует foreach для поиска и маркировки максимального значения, однако, если у меня есть массив, вложенный в БОЛЕЕ два уровня, чем мой код будет бесполезным. Может ли кто-нибудь объяснить мне идею функции, называющей себя для поиска неограниченных вложенных массивов? Было бы очень признательно.

Вот мой код, например:

<?php $arr = array("1", "2", array("3", "4")); foreach($arr as $value){ if(is_array($value)){ foreach($value as $value2){ $max_array=array($value); // no deeper levels } } else { $max_array=array($value); } } echo max($max_array); ?> 

Вы можете использовать array_walk_recursive() для него:

 function array_max_recursive($arr) { $max = -INF; array_walk_recursive($arr, function($item) use (&$max) { if ($item > $max) { $max = $item; } }); return $max; } echo array_max_recursive(["1", "2", ["3", "4"]]); // 4 

То, что вы хотите, является рекурсивной функцией.

Функция ищет самый большой элемент в массиве. Если элемент массива является массивом, он найдет самый большой элемент в этом массиве и будет использовать его для сравнения.

Чтобы найти самое большое значение в этом массиве, он будет использовать ту же функцию.

 function findMax($arr){ $max = 0; foreach($arr as $item){ if(is_array($item)){ $val = findMax($item); }else{ $val = $item; } $max = $val>$max?$val:$max; } return $max; } 

Пример использования:

 $arr = Array(1,2,Array(3,10,Array(6,7))); $arr2 = Array(1,2,Array(3,5,Array(6,7))); echo findMax($arr)."\n".findMax($arr2); 

Результат:
10
7