我说的是第二个“返回-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)。
答案 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。