У меня есть массив
$a = array( "2010-05-03" =>100, "2010-05-04" =>400, "2008-05-01" =>800, "2011-01-01" =>800 );
Как найти максимум и минимум по key( date)
?
Например:
max => 2011-01-01 min => 2008-05-01
Я был бы ленив и просто позволял PHP смотреть дважды над массивом. Как только найти минимум и второй раз, чтобы найти первый соответствующий ключ для этого значения:
$min_key = array_search(min($a), $a);
Или для максимума:
$max_key = array_search(max($a), $a);
(Не уверен, хотите ли вы значения для клавиш max и min или клавиш для значений max и min.)
Это возвращает значения для клавиш max / min:
$keys = array_keys($a); $min = $a[min($keys)); $max = $a[max($keys));
$maxK = $a[0]; $minK = $a[0]; foreach($a as $k => $v) { if($v > $a[$maxK]) $maxK = $v; if($v < $a[$minK]) $minK = $v; }
Вероятно, вы хотите. Затем вы можете получить минимальные / максимальные клавиши и значения так:
$maxKey = $maxK; $maxValue = $a[$maxK]; $minKey = $minK; $minValue = $a[$minK];
Один из подходов заключался бы в том, чтобы извлечь ключи из массива через array_keys, а затем естественный случай сортировать ключи через natcasesort .
Таким образом, вы получите:
<?php $testData = array( "2010-05-03" =>100, "2010-05-04" =>400, "2008-05-01" =>800, "2011-01-01" =>800 ); natcasesort($testKeys = array_keys($testData)); echo 'Min: ' . $testKeys[0] . ', max: ' . $testKeys[count($testKeys) - 1] . '<br />'; ?>
asort($a); $keys = array_keys($a); $min = $keys[0]; $max = $keys[count($keys) - 1];
или просто
$min = array_search(min($a), $a); $max = array_search(max($a), $a);