这个usmp cmp函数实际上如何工作?

时间:2016-08-31 07:41:54

标签: php arrays usort

这里有一个答案:Combine two array and order this new array by date

它解释了如何合并两个数组,然后按日期排序。

function cmp($a, $b){
    $ad = strtotime($a['date']);
    $bd = strtotime($b['date']);
    return ($ad-$bd);
}
$arr = array_merge($array1, $array2);
usort($arr, 'cmp');

解决方案看起来很优雅,但我对此感到困惑

return ($ad-$bd);

我的意思是没有比较运算符,它只是减去

function newFunc($a, $b) {
    return($a-$b);
}

echo newFunc(5,3);

返回2

那么这实际上如何表明如何对数组进行排序?

更新

我按照建议进一步阅读了usort页面上的文档。它是否对每个元素执行此减法操作?它是否遍历每个数组元素并从其他元素中减去它?试图绕过这个。

2 个答案:

答案 0 :(得分:2)

如果您阅读manual,则会看到:

  

如果第一个参数被认为分别小于,等于或大于第二个参数,则比较函数必须返回小于,等于或大于零的整数。

通过减去值,可以获得正数或负数或0值,这样可以对值进行排序。

答案 1 :(得分:2)

引用文档时,usort value_compare_func的功能是:

  

如果第一个参数被认为分别小于,等于或大于第二个参数,则比较函数必须返回小于,等于或大于零的整数。

在这种情况下,两个日期都被转换为Unix时间戳,即自纪元以来的秒数。如果$a$b之前出现,则自纪元以来它的秒数会减少,因此从$b中减去它将返回一个负数。如果它出现在$b之后,减去两个将返回一个正数,如果它们相同,则减法当然会返回零。