2011-05-04 59 views
3

最大和最小日期我有一个数组如何找到关键

$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 

回答

8

我会懒惰,只是让PHP看看数组两次。一旦找到最低,第二次发现该值的第一个匹配项:

$min_key = array_search(min($a), $a); 

或为最大:

$max_key = array_search(max($a), $a); 
+0

'max()'和'min()'返回数组的最高/最低值,而不是最高/最低的键。 – 2011-05-04 19:45:40

+0

是的,这就是他们所做的。因此,第二步。 – mario 2011-05-04 19:46:10

+2

Arg,愚蠢的我认为'array_search()'返回一个值,而不是一个键......但这没有任何意义。抱歉! :-) – 2011-05-04 19:49:07

2
$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]; 
1
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); 
2

一种方法是通过array_keys从阵列中提取密钥,然后通过对自己的密钥进行排序。

因此,你最终用:

<?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 />'; 
?> 
4

(不知道是否要用于最大值和最小值键或为最大值和最小值的值的键)

这将返回最大值/最小值的值:

$keys = array_keys($a); 
$min = $a[min($keys)); 
$max = $a[max($keys)); 
+0

二读时,这可能是OP实际要求的。 (查找最短/最长日期。) – mario 2011-05-04 19:53:27