PHP мин и макс с массивом, это надежно? - PullRequest
3 голосов
/ 13 февраля 2011

Это работает, но это надежно?Будет ли он работать всегда, так как MAINarray содержит ANOTHERarray, который содержит 2 значения, а min должен работать в MAINarray и находить самое любимое значение в его подрайонах ....

$a[0]=array(0=>522,1=>'Truck');
$a[1]=array(0=>230,1=>'Bear');
$a[2]=array(0=>13,1=>'Feather');
$a[3]=array(0=>40,1=>'Rabit');
$z=min($a);$y=max($a);
echo "The easiest is ".$z[1]." with only ".$z[0]." pounds!<br>";
echo "The haviest is ".$y[1]." with ".$y[0]." pounds!";

Что вы говорите?:)

Ответы [ 4 ]

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

Да, это надежно. Можно с уверенностью предположить, что min(array(1, 2, ..., n)) эквивалентно min(1, 2, ..., n), а документация специально описывает, как min сравнивает несколько массивов:

// With multiple arrays, min compares from left to right
// so in our example: 2 == 2, but 4 < 5
$val = min(array(2, 4, 8), array(2, 5, 1)); // array(2, 4, 8)
2 голосов
/ 13 февраля 2011

Я понимаю, как min работает с вашим типом ввода:

  1. Рассмотрим только массивы с наименьшим количеством элементов.
  2. Сравните первые элементы
  3. Если есть связь, сравните следующий элемент каждого массива.Повторите шаг.

Например:

array(
  array(1, "A"),
  array(2),        // min
)


array(
  array(1, "A"),  // min
  array(2, "A"),        
)

array(
  array(1, "Z"),  
  array(1, "A"),  // min
)

У меня нет источника этой информации, но я помню, как она работает.

1 голос
/ 13 февраля 2011

Я не уверен, всегда ли это работает. В случае сомнений просто внедрите функцию самостоятельно:

function extremes($array, $key=0) {
    if (count($array) === 0) return null;
    $min = $max = null;
    foreach ($array as &$val) {
        if (!isset($val[$key])) continue;
        if ($min > $val[$key]) $min = $val[$key];
        else if ($max < $val[$key]) $max = $val[$key];
    }
    return array($min, $max);
}

$a = array(array(522, 'Truck'), array(230, 'Bear'), array(13, 'Feather'), array(40, 'Rabit'));
list($z, $y) = extremes($a);
0 голосов
/ 13 февраля 2011

Единственное доказательство, которое я смог найти, чтобы сказать, что он предназначен для возможности использования массива массивов для сравнения, - это сообщение об ошибке для улучшения документации php.http://bugs.php.net/bug.php?id=50607

Хотя для них весьма маловероятно, что они уберут эту функцию из-за того, что ей приходится сравнивать массивы уже путем их рекурсивного входа.Сам список аргументов при использовании функции обычно будет массивом, потому что нет конечного числа аргументов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...