- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编码
<?php
$consts = get_defined_constants();
$consts = array_keys($consts);
usort($consts,function($a,$b){return (int)(strlen($a)<strlen($b));});
foreach($consts as $const){
echo strlen($const).": ".$const."\n";
}
将在 PHP 8.0.0 之前按照我的预期从最长到最短打印所有定义的常量。 7.3.13 开始于
62: SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE
62: SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE
60: SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE
60: SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE
51: SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX
但我不知道 PHP8.0.0 做了什么,它的输出开始于:
9: E_WARNING
21: FILTER_FLAG_STRIP_LOW
7: E_ERROR
26: FILTER_FLAG_STRIP_BACKTICK
你可以在 3v4l 上看到它:
https://3v4l.org/MP2IF
最佳答案
这里的大多数其他答案都集中在如何解决问题上,但我想我会尝试解释为什么在 PHP 8 中发生了变化,我认为这是您感兴趣的。
PHP 8 引入了 Stable Sorting RFC ,这(听起来)意味着 PHP 中的所有排序函数现在都是“稳定的”。链接中有关此的更多详细信息。
其他答案已经很好地涵盖了这一点,但是您的函数返回零或大于零的数字。以前的 PHP 排序实现(在低于 8 的所有版本中)认为零和负数相同;正如上面提到的 RFC,检查只是为了一个大于零的数字,或者不是。返回零意味着这些元素的处理方式与 $a < $b
的情况相同。 .
PHP 引入了弃用警告,因此许多返回 bool 值的排序实现仍然可以工作。 RFC 对此提供了更多详细信息,但重要的是这意味着 PHP 8 仍然向后兼容它们(因此这是弃用通知,而不是警告)。这里的边缘情况是,虽然您的函数有效地返回了一个 bool 值 - 0 表示相同长度,而 1 表示 $a < $b
- 因为你把它转换成一个整数,PHP 8 中的向后兼容性检查没有捕捉到它,所以所有“相等”的元素都被认为是 $a < $b
相比:
function($a, $b) { return (int) (strlen($a) < strlen($b)); }
与问题一样 - 在 PHP <8 中正常工作,但不会引起弃用通知。
https://3v4l.org/MP2IF
function($a, $b) { return strlen($a) < strlen($b); }
返回一个 bool 值,因此 PHP 8 中的向后兼容性检查工作正常。但是现在提出了弃用通知。
https://3v4l.org/fWR2Y
function($a, $b) { return strlen($b) <=> strlen($a); }
“正确”的解决方案,在所有版本中都能正常工作(至少自从引入了飞船运算符(operator)以来)。
https://3v4l.org/6XRYW
关于php - PHP8.0.0 中发生了什么来破坏 usort(...(int)(strlen($a)<strlen($b)));?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65382799/
我有以下数据作为关联数组 array 'abc' => array 'label' => string 'abc' (length=3) 'weight' => f
我有一个这样的关联数组 Array ( ["News 1"] => Array ( [text] => tests [langu
我有一个数组数组。 我正在尝试使用此代码根据主数组的每个元素的字段对主数组进行排序。 $field = $this->sorting; usort($this->out_table["rows"],
您好,如何向usort 传递更多参数? 我有不同的功能,它们在结构上非常相似,我只想拥有一个功能: 100, 'string'=>'aaa'), array('num
作为 mysql 查询的结果,我得到了一个房间数组 ( mysql_fetch_assoc() )。我想“随机”地排序这个数组,但有一个规则。每个房间号不能比下一个房间号高或低超过 2 个。 现在我认
我有一个只有一行的 usort 函数:return 0。 我尝试在 stdClass 对象数组上使用它,它改变了 他们的顺序,这怎么可能? 最佳答案 您假定的属性称为 stability : 稳定 排
在 PHP 中 manual for usort() ,它指出: If two members compare as equal, their relative order in the sorted
这个 usort 函数返回的数组与我想要的相反。它返回一个类似 ("1", "2", "3") 的数组。如何让它返回 ("3", "2", "1")? usort($myArray, function
我的 json 结果数组返回如下: ["AuctionInfo"]=> [0]=> array(13) { ["price"]=> int(3000) } [1]=> array(13)
我有一个 usort() 示例,我添加了一些 echo 语句来查看代码的工作原理: "; foreach ($order as $key => $value) { echo "
我有一个数组: $cards = [ [ "from" => "Barcelona", "to" => "Gerona Airport",
是否可以使用 usort 对多维数组中的多个字段进行排序?例如,我想按字母顺序对 name 进行排序,然后从这些记录中按 age 对它们进行排序。这可以使用 sort 吗? Array ( [
这是要排序的元素数组的示例: $items = array 0 => object(stdClass)[8] public 'id' => st
今天发现一个很好用二维数组排序的php方法,usort,推荐给大家,以后二维数组里面,要按照一个字段的值排序用这个方法简单高效,例如下面的数组: ?
例如像下面的数组: 复制代码 代码如下: $users = array( array('name' => 'tom',
我正在使用 usort 对多维数组进行排序。它工作正常,直到用于排序的键连接一个全局变量。 var_dump($lang);//OK, outputs 'eng' function cmp(array
我有用户定义的函数排序,它按日期排序。它在同一年工作正常,并且在年份更改时不起作用。 这是按函数排序的日期示例: 01/02/2013 01/03/2013 12/12/2012 func
我正在重写一个旧脚本,该脚本使用 usort 吐出最受欢迎的内容。 出于某种原因,我的 usort 的输出实际上没有排序。 我正在使用 php 5.5(请忽略已贬值的 mysql_ 函数的使用,这是我
我有一个代表 SMS 的对象的数组(嗯,一个 PHP 数组...这不是真正的数组。但你明白了。)。这些对象中的一个字段是 DateTime 类型,我想按该字段对数组进行排序。 我无法对 DB 中的数据
考虑以下代码: $external_variable = TRUE; usort($array, function($a, $b) { // do sorting stuff based on
我是一名优秀的程序员,十分优秀!