Следующий код использует простую стратегию для поиска макс вложенного массива. Он использует 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