返回-1的原因是什么,而不是在这个函数的代码末尾让我们说0?

时间:2017-10-02 18:11:16

标签: php arrays sorting foreach usort

我说的是第二个“返回-1;”在代码的第12行。仅当两组数字完全相同时才会达到这一点,例如将'192.167.11'与'192.167.11'进行比较时。我还要补充一点,使用范围(0,2)对于这段代码来说是更好的选择(范围(0,3)如果两个元素恰好相同则产生错误;我没有改变它,因为这是原始的来自w3resource.com的PHP Array Exercise#21的代码示例。

tf.layers.dense(input_placeholder, units)

返回“-1”会将第二个元素(与当前$ x和$ y对中的第一个元素相同)移向数组的较高索引(在数组中)。如果两个元素完全相同,为什么不返回“0”并保持原样?有没有理由根据usort()的工作方式(或其他任何因素)返回“-1”?

感谢。

编辑:

我认为这是插入排序(数组大小为6-15个元素;通常是Quicksort)。

2 个答案:

答案 0 :(得分:0)

如果两个元素相同,则交换订单和保持订单相同之间没有区别。因此,在这种情况下返回的内容并没有什么不同。

你是对的0更合适。如果usort稳定"这将更为重要。但是documentation

  

注意:
  如果两个成员比较相等,则它们在排序数组中的相对顺序是未定义的。

答案 1 :(得分:0)

为了说明@DissPanic的优点:

<?php
function sort_subnets($x, $y){
    $x_arr = explode('.', $x);
    $y_arr = explode('.', $y);
    return $x_arr <=> $y_arr;
}

$subnet_list =
    array('192.169.12',
        '192.167.11',
        '192.169.14',
        '192.168.13',
        '192.167.12',
        '122.169.15',
        '192.167.16'
    );
usort($subnet_list, 'sort_subnets');
print_r($subnet_list);

请参阅live code

请注意使用“太空飞船”运算符,即<=>,它提供简洁性,使得必须在函数中编写如下代码:

    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;

最后,请注意usort()的用户定义回调使用 ternary logic ,因为有时候排序bivalent逻辑不足。然而,usort()本身使用两部分逻辑,成功时返回TRUE,失败时返回FALSE。