我正在寻找对多维数组进行排序的最佳方法,我希望它根据子数组包含的内容进行排序。
这是我的阵列:
Array
(
[0] => Array
(
[id] => 2
[level] => 3
[lastAction] => "String Here"
[actionAt] => 23/03/2014
)
[1] => Array
(
[id] => 4
[level] => 5
[lastAction] => "Another String here"
[actionAt] => 24/3/2014
)
[2] => Array
(
[id] => 9
[level] => 1
[lastAction] => "String again"
[actionAt] => 01/01/2013
)
)
我想根据子阵列中的ActionAt对3个主阵列进行排序,这怎么可能?
我已经读过一些关于它的内容,有些人说ksort和usort,但是我无法让它正常工作。
答案 0 :(得分:2)
您需要实现自己的比较功能并使用usort:
function cmp($a, $b)
{
if ($a['actionAt'] == $b['actionAt']) {
return 0;
}
//Assuming your dates are strings (http://stackoverflow.com/questions/2891937/strtotime-doesnt-work-with-dd-mm-yyyy-format)
$atime = strtotime(str_replace('/', '-', $a['actionAt']));
$btime = strtotime(str_replace('/', '-', $b['actionAt']));
return ($atime < $btime) ? -1 : 1;
}
usort($array, "cmp");
答案 1 :(得分:2)
如果你想使用usort,你必须做一个比较功能。像这样:
function mySort($a, $b)
{
$dateA = new DateTime($a['actionAt']);
$dateB = new DateTime($b['actionAt']);
if($dateA < $dateB)
return -1;
elseif($dateA == $dateB)
return 0;
else
return 1;
}
usort($myArray, "mySort");
答案 2 :(得分:1)
function custom_sort($a,$b) {
return strtolower($a['id']) > strtolower($b['id']);
}
usort($yourArray, 'custom_sort');
注意:您可以更改$ a []和$ b []以对您想要的密钥进行排序。