Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP usort()用于假人_Php - Fatal编程技术网

PHP usort()用于假人

PHP usort()用于假人,php,Php,很抱歉发布了这个完全混乱的n00b问题,但是我没有在文章中绕过神秘的usort()解释 当我在cmp功能中echo$a时,我得到一个5156120作为第一项的键,当我echo$b时,我得到2535630 这基本上就是我的全部问题:回调函数中的$a和$b是什么? 但是如果你真的想帮忙,请对正在发生的事情给出一个“逐行”的解释 快乐,奈 (我试图添加标记“noob”和“fuzzle”,但还需要更多。$a和$b是在自定义比较函数中比较的两个值 如果您有正在排序的数组(3,2,5,6,1),您会发现

很抱歉发布了这个完全混乱的n00b问题,但是我没有在文章中绕过神秘的
usort()
解释


当我在
cmp
功能中
echo$a
时,我得到一个
5156120
作为第一项的键,当我
echo$b
时,我得到
2535630

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

快乐,奈


(我试图添加标记“noob”和“fuzzle”,但还需要更多。

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

如果您有正在排序的
数组(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");

我看到
usort()
通常用于进行更为复杂的比较,您需要将值分解并只比较其中的一部分,或者分配自定义优先级(例如,按职位总裁、副总裁、秘书等排序,按优先级而不是按字母数字值排序)
$a
$b
是在自定义比较函数中比较的两个值

如果您有正在排序的
数组(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");


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

$a也是传递给usort()的数组。这可能是OP困惑的一部分。说得好!您可以用
$array
替换
$a
变量,该变量以
$array=array开头(3,2…
直到代码块的末尾。该代码样本直接从php文档页面中获取,如果新用户给数组变量起了另一个名字,那么对他们来说确实不会那么混乱。@fvu很抱歉现在才回来,不得不进入新的一年。。)我已经解决了关于
$a
的实际困惑,但这最终导致我在这里提问,因为关于
$b
的神秘主义在函数中扩散到
$a
,因为没有传递任何信息。因此我同意更改数组手册中的
$a
,并请提供有关
$a
$b
在描述中的函数中。@dollarvar我所知道的许多语言都提供了带有可插入比较器的排序和/或搜索函数,它们都使用与php使用的比较器函数非常相似的比较器函数——请查看C或Java。我只能假设php人员认为他们的解决方案是“足够明显的”:)$a也是传递给usort()的数组。这可能是OP困惑的一部分。说得好!您可以用
$array
替换
$a
变量,该变量以
$array=array开头(3,2…
直到代码块的末尾。该代码样本直接从php文档页面中获取,如果新用户给数组变量起了另一个名字,那么对他们来说确实不会那么混乱。@fvu很抱歉现在才回来,不得不进入新的一年。。)我已经解决了关于
$a
的实际困惑,但这最终导致我在这里提问,因为关于
$b
的神秘主义在函数中扩散到
$a
,因为没有传递任何信息。因此我同意更改数组手册中的
$a
,并请提供有关
$a
$b
在描述中的函数中。@dollarvar我所知道的许多语言都提供了带有可插入比较器的排序和/或搜索函数,它们都使用与php使用的比较器函数非常相似的比较器函数——请查看C或Java。我只能假设php人员认为他们的解决方案是“足够明显的”:(当我添加
echo'a=>。$a.
,'b=>。$b.
'时,你肯定有一些不在b/c上面的代码中的事情发生
作为cmp函数的第一行,我得到了数组的值,正如预期的那样。usort函数所做的是遍历元素的每一对,并对它们进行比较,在进行排序的过程中对它们进行排序。所以,它会做3对2,但不会重复做2对3的努力。我遗漏了什么吗?检查这里的第一个答案,例如,在一个样本案例中显示了所有比较的对@JeremyMiller@Cthulhu公平地说,形成所有元素顺序所需的最小比较次数:很好的解释+1当我添加
echo'a=>。$a.
,'b=>。$b.
'时,您必须有b/c上方代码中没有的东西在进行
作为cmp函数的第一行,我得到了数组的值,正如预期的那样。usort函数所做的是遍历元素的每一对,并对它们进行比较,在进行排序的过程中对它们进行排序。所以,它会做3对2,但不会重复做2对3的努力。我遗漏了什么吗?检查这里的第一个答案,例如,在一个样本案例中显示了所有比较的对@JeremyMiller@Cthulhu公平地说,形成所有元素顺序所需的最小比较次数:很好的解释+1.
5 :compared with: 2
5 :compared with: 3
5 :compared with: 6
1 :compared with: 5
2 :compared with: 1
3 :compared with: 2