PHP или любой другой программный язык - PullRequest
1 голос
/ 24 февраля 2011

Привет, любой может помочь мне найти максимальное значение массива, которое приведено ниже. я ожидаю, что результат 650 является максимальным значением ....

$my_array = array(array(128,300,140)10,15,array(130,array(500,650))); 

Ответы [ 7 ]

3 голосов
/ 24 февраля 2011

Вот, пожалуйста, используя 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);
}
1 голос
/ 24 февраля 2011

Также возможно

$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
1 голос
/ 24 февраля 2011

Свести массив, затем вызвать max() для него.Возвращаемое значение max() должно быть 650 из вашего примера.

0 голосов
/ 24 февраля 2011
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;
}
0 голосов
/ 24 февраля 2011
<?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";

?>
0 голосов
/ 24 февраля 2011

Это делает трюк:

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?

0 голосов
/ 24 февраля 2011

Вы также можете сделать это рекурсивно, если элемент является массивом, снова вызвать функцию, чтобы вернуть элемент max из этого массива.

В конце у вас всегда должен быть элемент max, а затем на последней итерации вы можете вызвать max из этих результатов.

...