我正准备在一个大型应用程序上升级到PHP8.2,显然要经历PHP8.1和8.2之间的变化.公元前HERE年提到的突破性变化之一是:

Ksort()和krsort()现在使用标准的PHP8规则在SORT_REGROUL下进行数字字符串比较.

我似乎不明白这意味着什么.因为ksort是按键排序的,所以我假设在此之前它会对NOT进行类似如下的排序:

[
    '-5' => 'minus five',
    '4' => 'THIS SHOULD MOVE',
    '1' => 'one',
    '2' => 'two',
    '100' => 'hundred',
];
ksort($arr, SORT_REGULAR);
var_dump($arr);

但我用的是https://onlinephp.io/,它在7.x、8.1和8.2上运行得很好. 我试着用SORT_REGULAR和没有.

array(5) {
  [-5]=>
  string(10) "minus five"
  [1]=>
  string(3) "one"
  [2]=>
  string(3) "two"
  [4]=>
  string(16) "THIS SHOULD MOVE"
  [100]=>
  string(7) "hundred"
}

有人能给我解释一下我有什么不明白的地方吗?

推荐答案

这似乎更多的是关于混合字母键和数字键,所以在您的示例中这不是问题.

如果将数组更改为

$arr = [
    '-5' => 'minus five',
    'a' => 'THIS SHOULD MOVE',
    '1' => 'one',
    '100' => 'hundred',
    '2' => 'two',
];

在8.2之前,这给出了(测试结果为8.1.13、8.0.26、7.4.33:On https://onlinephp.io/)

array(5) {
  [-5]=>
  string(10) "minus five"
  ["a"]=>
  string(16) "THIS SHOULD MOVE"
  [1]=>
  string(3) "one"
  [2]=>
  string(3) "two"
  [100]=>
  string(7) "hundred"
}

其中字母介于-ve和放置在+ve数字之前.

在8.2版本中,这将改为输出

array(5) {
  [-5]=>
  string(10) "minus five"
  [1]=>
  string(3) "one"
  [2]=>
  string(3) "two"
  [100]=>
  string(7) "hundred"
  ["a"]=>
  string(16) "THIS SHOULD MOVE"
}

这篇PHP 8.2: ksort(..., SORT_REGULAR) sort order changes岁的文章对此进行了更多的讨论...

在PHP8.2之前,ksort将字母键放在数字键之前 keys .例如,当对以a、b、1和2为键的数组进行排序时, 排序的顺序是a、b、1、2,因为字母键是 放在数字键之前.从PHP8.2开始,增加了ksort函数 与其他数组排序函数一致,并放入数字 字母键之前的键.

Php相关问答推荐

未在moodle上运行的计划任务

累加平面数组中数字子集的所有组合,以生成组合及其乘积的二维数组

如何使用ms graph php sdk v2列出具有已知路径的DriveItem的子项

与会者在WooCommerce中按购物车项目数量自定义 checkout 字段

PHP:PHP手册-Manual

移动应用:在PHP中忽略Cookie?

在PHP中处理Linux输入事件(/dev/input/Event*)

在WooCommerce管理中为订单项目添加自定义字段价格值

execute_query 和prepare+execute 有什么区别?

将一个表中的行连接为不同表MYSQL中的一列

根据小计向 WooCommerce Checkout 添加佣金

htaccess 重定向子域错误的 url

将产品数量、名称和结帐链接添加到 WooCommerce 添加到购物车消息

当所有对象都属于同一类型时,我可以省略 PHP in_array() 中的 strict 参数吗?

使用其ID查询和捕获与订单相关的其他详细信息的shopware 6方法

CodeIgniter 4中嵌套过滤器组不起作用

如何在构建 PHP 类别数组树的递归函数中将父面包屑传递给子项?

我需要获取传递到这个数组中的数据,但我没有得到它,因为在 Laravel 中数组是这样出现的

如何正确使用Flysystem和Local Adapter

如何将文件直接上传到 Cloudinary 而不先保存在 public 文件夹中