代码之家  ›  专栏  ›  技术社区  ›  now_m

是否可以通过自定义编写的php代码看到使用usort对数组排序的各个阶段?

  •  -1
  • now_m  · 技术社区  · 8 年前

    https://github.com/php/php-src/blob/eac0bf11e4e97916e9688b18e6d62572e12e129f/Zend/zend_sort.c#L176

    <?php
    function testing($a,$b){
        if ($a < $b ){
            return -1;
        }
        elseif ($a > $b){
            return 1;
        }
        //else {
            //return 0;
        //}
    }
    
    $array = array(1,3,2,4,5);
    usort($array, "testing");
    var_dump($array);
    ?>
    

    人们一直在说我想得太多了,这是不必要的,但看到数组排序的每个阶段将是算法工作方式的最佳表示(从我可以用echo或类似的东西输出的$a-b对中找出这一点不是那么容易)。var_dump不会告诉我数组排序的阶段,它总是一样的。

    有人提出了这样的建议,但我一直没有弄明白,这可能不是一件可行的事情:

    “您可以尝试使用引用数组的匿名函数(usort($arr,function($a,$b)use($arr){…}))并且每一步都输出数组,我不确定结果是否会立即反映出来。"

    1 回复  |  直到 8 年前
        1
  •  0
  •   Don't Panic    8 年前

    输入数组的副本是在usort中创建的,因此您无法通过PHP代码观察它在做什么。

    请参见 PHP source code for usort

    /* Copy array, so the in-place modifications will not be visible to the callback function */
    arr = zend_array_dup(arr);