让我们考虑以下代码:
private void OnZonesReceived(DesignerCanvas canvas)
{
Zones = new List<ZoneModel>(canvas.Zones);
}
以上代码根据$arr = [ [ 'expiryDate' => '2018.6' ], [ 'expiryDate' => '2018.5' ], [ 'expiryDate' => '2018.7' ] ];
$sortby = "expiryDate";
usort($arr, function($a1, $a2) use ($sortby) {
$d1 = DateTime::createFromFormat("Y.m", $a1[$sortby])->getTimestamp();
$d2 = DateTime::createFromFormat("Y.m", $a2[$sortby])->getTimestamp();
return $d1 - $d2;
});
echo "<pre>";
var_dump($arr);
对$arr
进行排序,没问题。
现在考虑一下:
expiryDate
两个代码都有相同的比较器,但输出不同。基本上第二个代码无法按要求排序。第二个片段有什么问题?我在这里缺少什么?
答案 0 :(得分:2)
排序正在运行,但是你的函数永远不会传回结果,所以要么返回数组要么将函数声明更改为...
function sortItOutYourself(&$arr, $sortby, $isDate) {
&
表示它使用相同的数组而不是副本。