PHP usort()for Dummies

时间:2013-12-31 18:25:11

标签: php

很抱歉发布这个完全混淆的n00b问题,但我没有绕过manual中的奥术usort()解释。

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

$a = array(3, 2, 5, 6, 1);

usort($a, "cmp");

foreach ($a as $key => $value) {
    echo "$key: $value\n";
}
?>

当我在echo $a函数中cmp时,我得到5156120作为第一项的关键字,当我echo $b时,我得到2535630

这基本上是我的整个问题:回调函数中的$a$b是什么? 但是如果你想真正提供帮助,请对所发生的事情给出一个“逐行”的解释。

HAPPY NYE !!!

(我尝试添加标签“noob”和“confused”,虽然需要1400点声望。;)

1 个答案:

答案 0 :(得分:4)

$a$b是自定义比较函数中要比较的两个值。

如果您要排序array( 3, 2, 5, 6, 1),您会发现cmp()会比较3到2,2到5,5到6等,直到值正确排序。

所以,例如:

<?php

function cmp($a, $b)
{
    echo "$a :compared with: $b <br/>";
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

$arr = array(3, 2, 5, 6, 1);

usort($arr, "cmp");

输出:

5 :compared with: 2
5 :compared with: 3
5 :compared with: 6
1 :compared with: 5
2 :compared with: 1
3 :compared with: 2 

我看到usort()通常用于进行更复杂的比较,你需要拆分价值并只比较一部分,或者分配自定义优先级(例如按总统,副总裁,秘书排序)等等,优先而不是字母数字值)