【发布时间】:2018-10-14 22:02:22
【问题描述】:
为什么下面sn-p中的usort函数不仅按照'num'键的值降序对矩阵进行排序,而且还对'num'键的值相等的元素按值排序'lett' 键按升序排列?如何仅按函数主体中给出的内容对其进行排序?
<?php
$mtx = [["num"=>1,"lett"=>"f"],
["num"=>3,"lett"=>"b"],
["num"=>3,"lett"=>"a"]
];
usort($mtx, function($a,$b) {
if($a['num']<$b['num']) return 1;
if($a['num']>$b['num']) return -1;
});
var_dump($mtx);
/*
array(3) { [0]=> array(2) { ["num"]=> int(3) ["lett"]=> string(1) "a" }
[1]=> array(2) { ["num"]=> int(3) ["lett"]=> string(1) "b" }
[2]=> array(2) { ["num"]=> int(1) ["lett"]=> string(1) "f" }
}
*/
【问题讨论】:
-
@Jeff 应该是
return $b['num'] - $a['num'];。 -
哎呀,真的。我认为 usort 需要一个布尔值作为返回值。然后我会删除我的评论...
-
@Jeff 见this。这实际上在很多情况下都有效,奇怪的是,它并不完全可靠:)