2012-03-16 127 views
0
的字符串索引

如果我有这样的如何排序在PHP关联数组,然后找到结果

$array = array(); 
$array['e01'] = '03/16/2012'; 
$array['e02'] = '03/14/2012'; 
$array['e05'] = '03/01/2014'; 

关联数组我想数组按日期再通过结果循环排序得到索引的值,即e01,e02,e05。我需要该索引从对象中检索信息。

回答

0

来自PHP documentation on asort()。这将按值排序并让您访问每个索引的键和值:

$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple"); 
asort($fruits); 
foreach ($fruits as $key => $val) { 
    echo "$key = $val\n"; 
} 
+0

这对于他的日期格式无法正常工作。它是按字符串排序的。按字符串排序日期会导致大部分时间不正确的结果。 – Crashspeeder 2012-03-16 16:47:20

+0

伟大的工作得很好。感谢您编写完成所有事情的几行代码。但是,我会添加一个用户排序函数来将字符串更改为时间。 – user823527 2012-03-16 18:33:26

+1

@Crashspeeder:以离域格式编写处理日期/时间将允许您忽略这些问题,因为离域从一般到特定:'2012/01/10 12:00:01'。年>月>天>时间>分钟>秒> ... – 2012-03-16 19:33:15

1

尝试uasort()排序的数组:

function mysort($a, $b) { 
    return (strtotime($a) < strtotime($b)) ? -1 : 1; 
} 

uasort($array, 'mysort'); 

为了得到键你可以只使用array_keys()

+0

我认为如果我将你对uasort()的建议与Stewart的回答结合起来,我会得到正确的解决方案。他的代码做我想要的,并且实际上完成了排序。但我宁愿添加strtotime函数。感谢您指出了这一点。 – user823527 2012-03-16 18:38:52

1

当排序的关联数组,键和值更改订单,但关键值协会将不变。因此,如果密钥e01的值为03/16/2012,即使在uasort(这可能是您要查找的内容,请参阅Crashspeeder的答案)e01仍将具有值03/16/2012。如果你想改变值的顺序,同时保持键的顺序:

  • 使用array_keys领取钥匙
  • 使用usort(无需uasort,因为我们没有保留的当前顺序键)按日期对值进行排序
  • 使用array_combine使用键和值创建一个新数组。