Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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的cmp_功能需要这么多限制?_Php_Sorting - Fatal编程技术网

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