Php 为什么usort的cmp_功能需要这么多限制?
引自: 比较函数必须返回小于、等于或等于的整数 如果第一个参数被认为是 分别小于、等于或大于第二个 在我看来,Php 为什么usort的cmp_功能需要这么多限制?,php,sorting,Php,Sorting,引自: 比较函数必须返回小于、等于或等于的整数 如果第一个参数被认为是 分别小于、等于或大于第二个 在我看来,cmp_函数只需要在第一个大于第二个的情况下返回1 为什么它需要所有3个案例 更新 function bubble($list) { $length = count($list) - 2; $sorted = false; while(!$sorted) { $sorted = true; foreach(range(0,
cmp_函数
只需要在第一个大于第二个的情况下返回1
为什么它需要所有3个案例
更新
function bubble($list)
{
$length = count($list) - 2;
$sorted = false;
while(!$sorted)
{
$sorted = true;
foreach(range(0,$length) as $i)
{
if($list[$i] > $list[$i + 1])
{
$sorted = false;
list($list[$i],$list[$i + 1]) = array($list[$i + 1],$list[$i]);
}
}
}
return $list;
}
这样它就可以区分
这类似于对回调的要求,例如C的qsort
(据我所知,usort
可以在内部使用qsort
实现)
可以编写一个只需要两个值谓词的搜索例程,但是usort
恰好不是其中之一。这样它就可以区分
这类似于对回调的要求,例如C的qsort
(据我所知,usort
可以在内部使用qsort
实现)
可以编写只需要两个值谓词的搜索例程,但是usort
恰好不是其中之一。事实上,您几乎是对的,不需要3个不同的值
但是,一个值是不够的,您需要两个值:
- 1(正确)第一个>第二个
- 0(false)首先事实上你几乎是对的,你不需要3个不同的值
但是,一个值是不够的,您需要两个值:
- 1(正确)第一个>第二个
- 0(false),然后根据您的选项实现一个新的排序函数。usort的实现者有其他意见。然后根据您的选项实现一个新的排序函数。usort的实现者有其他观点。想想冒泡排序,只有
就足够了。@lexer:因为它给了库作者更多的自由,也意味着像strcmp
这样的函数可以很容易地用作回调。想想冒泡排序,只有
就足够了。@lexer:因为它给了库作者更多的自由,也意味着像strcmp
这样的函数可以很容易地用作回调函数。@Luis事实上你真的错了;可以使用1“>”和0“代替“Simone,很抱歉,您正在编写,0或任何负值实际上都以相同的方式运行。考虑到冒泡排序,您只需要提供一个函数,如果第一个小于第二个,则返回小于0
。但在另一种情况下,它必须返回某些内容!不能返回任何东西事实上函数可以像你定义的那样!但事实上func将返回1,当且仅当$a>$b,并且当且仅当$a@Luis事实上你真的错了时返回0;可以使用1“>”和0“代替“Simone,很抱歉,您正在编写,0或任何负值实际上都以相同的方式运行。考虑到冒泡排序,您只需要提供一个函数,如果第一个小于第二个,则返回小于0
。但在另一种情况下,它必须返回某些内容!不能返回任何东西事实上函数可以像你定义的那样!但是func实际上将返回1当且仅当$a>时$b和0当且仅当$a