usort用例的意外结果

时间:2018-02-13 07:58:58

标签: php

让我们考虑以下代码:

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

两个代码都有相同的比较器,但输出不同。基本上第二个代码无法按要求排序。第二个片段有什么问题?我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

排序正在运行,但是你的函数永远不会传回结果,所以要么返回数组要么将函数声明更改为...

function sortItOutYourself(&$arr, $sortby, $isDate) {

&表示它使用相同的数组而不是副本。