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