Как найти максимальную и минимальную дату по ключу

У меня есть массив

$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);