Привет, любой может помочь мне найти максимальное значение массива, которое приведено ниже. я ожидаю, что результат 650 является максимальным значением ....
$my_array = array(array(128,300,140)10,15,array(130,array(500,650)));
Вот, пожалуйста, используя RecursiveArrayIterator в 3-х читаемых строках кода:
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($array)); $flattenedArray = iterator_to_array($it); $max = max($flattenedArray);
Или, если вы хотите не выравнивать (и копировать), а предпочитать итерацию (использует гораздо меньше памяти, но медленнее):
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($array)); $max = 0; foreach ($it as $value) { $max = max($value, $max); }
Также возможно
$data = array(array(128,300,140),10,15,array(130,array(500,650))); $max = 0; array_walk_recursive( $data, function($val) use (&$max) { if($val > $max) $max = $val; } ); echo $max; // 650
Свести массив, затем вызвать max() для него.Возвращаемое значение max() должно быть 650 из вашего примера.
max()
function maximum($in) { if (!is_array($in)) $max = $in; else foreach ($in as $element) { $elementMax = maximum($element); if (isset($max)) $max = max($elementMax, $max); else $max = $elementMax; } return $max; }
<?php $my_array = array(array(128,300,140),10,15,array(130,array(500,650))); function findLargest($arr) { $largest = 0; foreach ($arr as $item) { if (is_array($item)) { $item = findLargest($item); } if ($item > $largest) { $largest = $item; } } return $largest; } echo "Largest is ".findLargest($my_array)."\n"; ?>
Это делает трюк:
function flatten($ar) { $toflat = array($ar); $res = array(); while (($r = array_shift($toflat)) !== NULL) { foreach ($r as $v) { if (is_array($v)) { $toflat[] = $v; } else { $res[] = $v; } } } return $res; } $arr = array(array(128,300,140),10,15,array(130,array(500,650))); echo max(array_flatten($arr));
РЕДАКТИРОВАТЬ: Обновлен массив сглаживания с Как «сгладить» многомерный массив в простой в PHP?
Вы также можете сделать это рекурсивно, если элемент является массивом, снова вызвать функцию, чтобы вернуть элемент max из этого массива.
В конце у вас всегда должен быть элемент max, а затем на последней итерации вы можете вызвать max из этих результатов.