如何排序在PHP关联数组,然后找到结果
问题描述:
的字符串索引
如果我有这样的如何排序在PHP关联数组,然后找到结果
$array = array();
$array['e01'] = '03/16/2012';
$array['e02'] = '03/14/2012';
$array['e05'] = '03/01/2014';
关联数组我想数组按日期再通过结果循环排序得到索引的值,即e01,e02,e05。我需要该索引从对象中检索信息。
答
来自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";
}
答
尝试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
答
当排序的关联数组,键和值更改订单,但关键值协会将不变。因此,如果密钥e01
的值为03/16/2012
,即使在uasort
(这可能是您要查找的内容,请参阅Crashspeeder的答案)e01
仍将具有值03/16/2012
。如果你想改变值的顺序,同时保持键的顺序:
- 使用array_keys领取钥匙
- 使用usort(无需uasort,因为我们没有保留的当前顺序键)按日期对值进行排序
- 使用array_combine使用键和值创建一个新数组。
这对于他的日期格式无法正常工作。它是按字符串排序的。按字符串排序日期会导致大部分时间不正确的结果。 – Crashspeeder 2012-03-16 16:47:20
伟大的工作得很好。感谢您编写完成所有事情的几行代码。但是,我会添加一个用户排序函数来将字符串更改为时间。 – user823527 2012-03-16 18:33:26
@Crashspeeder:以离域格式编写处理日期/时间将允许您忽略这些问题,因为离域从一般到特定:'2012/01/10 12:00:01'。年>月>天>时间>分钟>秒> ... – 2012-03-16 19:33:15