使用uasort对多维数组进行排序

3

目前我有一些类似于这样的多维数组

Array ( 
    [71] => Array ( [author] => 2 [date] => 1392867376 ) 
    [49] => Array ( [author] => 2 [date] => 1392868188 ) 
    [75] => Array ( [author] => 14 [date] => 1392867388) 
    [67] => Array ( [author] => 2 [date] => 1392870805 ) 
)

我想按“日期”排序,但我不知道该怎么做。我尝试了以下代码:
function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
uasort($visited, 'cmp');

但由于我不知道如何使用“比较函数”,也找不到相关参考资料,所以我很困惑。我只能找到一些非常模糊的内容。目前,这是按“作者”排序的。
请问有没有人能够友好地解释一下这些比较函数的工作原理(或者指导我去在线资源),告诉我如何按“日期”排序这个数组 - 同时保持所有键不变(键不能为空或删除)
非常感谢提供任何帮助的人。
附:我已经尝试了array_multisort - 它抹掉了我的键。

可能是如何在PHP中对多维数组进行排序的重复问题。 - Satish Sharma
@Sundar,我确实尝试过,但无法使其正常工作。如果主键都是随机数,例如上面的示例,您将如何在动态情况下工作?唯一一个可以正常工作而不会弄乱我的键的是uasort。因此,我对它提出了问题。谢谢。 - Noodle Head
请使用 var_dump($a, $b); 命令查看它们的值,而不是猜测。 - zerkms
从 PHP 网站上来看,“array_multisort()” 可以同时对多个数组进行排序,或者按照一个或多个维度对多维数组进行排序。关联(字符串)键将被保留,但数字键将被重新索引。很遗憾,这并不能解决问题,因为正如我所说,我需要键保持原样。 - Noodle Head
@zerkms - 这是我得到的结果:array(2) { ["author"]=> int(14) ["date"]=> int(1392867388) } array(2) { ["author"]=> int(2) ["date"]=> int(1392867376) } - Noodle Head
显示剩余3条评论
2个回答

7

尝试使用这个cmp函数:

function cmp($a, $b) {
    if ($a['date'] == $b['date']) {
        return 0;
    }
    return ($a['date'] < $b['date']) ? -1 : 1;
}

应该可以正常工作。


0

数组日期按升序排序

<?php
$a = array();
$a[71] = Array ('author' => 2, 'date' => 1392867376 );
$a[49] = Array ( 'author' => 14, 'date' => 1392868188 ) ;
$a[75] = Array ( 'author' => 2, 'date' => 1392867388) ;
$a[67] = Array ( 'author' => 2, 'date' => 1392870805 ) ;

$date = array();

// Obtain a list of columns
foreach ($a as $key => $row) {
    $date[$key]  = $row['date'];    
}

//sort the array date ascending order
array_multisort($date, SORT_ASC, $a);

//array is sorted in ascending order
print_r($a);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接