php7.0 ksort改变了,PHP ksort意外行为
参见英文答案 > ksort produces wrong result when dealing with alphanumeric characters 6个
让我从一开始就告诉你:我知道这个函数的排序标志.当我使用SORT_STRING时,它运行良好,但默认标志SORT_REGULAR很奇怪,或根本不起作用.
考虑如下的数组.
$arr = [
'27a' => 'foo',
'27b' => 'foo',
'27c' => 'foo',
'27' => 'foo',
];
当我尝试使用ksort进行排序时,它会给出一个数组,而不会以任何明显的逻辑进行排序.
ksort($arr);
print_r($arr);
// this prints
Array
(
[27a] => foo
[27] => foo
[27b] => foo
[27c] => foo
)
可以说,密钥既不是数字上的,也不是字母上的,也不是自然分类的.更奇怪的是,当我更改源数组的顺序时,它会给出不同的结果:
$arr = [
'27a' => 'foo',
'27' => 'foo',
'27b' => 'foo',
'27c' => 'foo',
];
ksort($arr);
print_r($arr);
// this prints
Array
(
[27b] => foo
[27c] => foo
[27] => foo
[27a] => foo
)
有谁知道这背后的逻辑?这是一个错误还是我错过了什么?
编辑:谢谢大家对我的问题感兴趣和回答.虽然它被标记为重复,但另一个问题没有提到更奇怪的部分:为什么更改源数组的顺序会改变结果?它应该使用相同的输入集给出相同的结果.我们也要讨论这个吗?
解决方法:
之所以发生这种情况,是因为它将像’27a’这样的键视为一个字符串,并将像’27’这样的键视为整数,即使它被引用.如果从27键中删除引号,您将看到相同的结果.
并且,正如ksort page所说:“警告:在对具有混合类型值的数组进行排序时要小心,因为sort()会产生不可预测的结果.”
奇怪的行为肯定 – 不幸的是,当你的键看起来像整数(即使它们是字符串)时产生预期结果的最好方法是指定排序标志,如SORT_STRING,以确保每次都得到预期的结果.
标签:php,ksort
来源: https://codeday.me/bug/20190622/1261681.html
php7.0 ksort改变了,PHP ksort意外行为相关推荐
- php7.0开发手册手机版_PHP7.0版本备注
这篇文章主要介绍了PHP7.0版本备注,新版本发布在性能方面大大提升,同时在语言特性方面也改变了不少,以下内容是LCT翻译对官方版本升级备注,需要的朋友可以参考 PHP7.0新版本不仅在性能方面大大提 ...
- CentOS7 php7.0 升级到php7.3
不要问我为什么要升级,我不是运维.如果你也不是运维的话,而且是公司的服务器的话,那你还是要慎重啊,我他么的就这样填了一天的坑,简单记录一下这坑爹的一天 备份之前的php7.0(这很重要,非常重要) 如 ...
- Linux环境PHP7.0安装
PHP7和HHVM比较 PHP7的在真实场景的性能确实已经和HHVM相当, 在一些场景甚至超过了HHVM.HHVM的运维复杂, 是多线程模型, 这就代表着如果一个线程导致crash了, 那么整个服务就 ...
- php5.3 php7兼容,Centos搭建PHP7.0.x让php5.3和php7兼容共存教程
先安装php5.3 就不说,说Centos搭建PHP7.0教程: # wget http://php.net/get/php-7.0.4.tar.gz/from/a/mirror 解压安装 # ta ...
- Windows IIS7 下安装配置 PHP7.0
确认Microsoft Visual C++版本 Microsoft Visual C++的版本至关重要,根据Microsoft Visual C++版本下载的PHP不同. PHP官网的 ...
- mac os x安装php7.0和phalcon3.0
1,安装xampp(with php7.0) 下载地址: https://www.apachefriends.org/download.html 2,安装phalcon3.0 cd ~/git clo ...
- php7.0 + mysql5.7.10 + nginx7.0 web开发环境搭建(CentOS7)
一.搭建nginx开发环境 参考官方文档:http://nginx.org/en/linux_pac... 1.设置yum 官当提供了利用yum来安装.升级nginx的方法 在/etc/yum.rep ...
- iis7.5 php7.0,(原创)win7自带IIS7.5+php7.0.10安装教程(图)
php在上周8月18日发布了PHP 7.0 (7.0.10)版本.详细下载页面http://windows.php.net/download/,根据自身电脑配置情况酌情下载版本.win7旗舰版,iis ...
- php 7.0 编译安装mysql_源码编译安装php7.0.5
源码编译安装php7.0.5 源码包下载地址 安装epel扩展yum源 [root@xuegod63 ~]# yum clean all [root@xuegod63 ~]# yum list 注:R ...
最新文章
- python函数几个return语句_Python常用函数--return 语句-阿里云开发者社区
- SpringMVC学习总结(2)——SpringMVC返回json配置
- C#三层架构第九课之反射和工厂模式实现多数据库访问
- html5响应式设置meta
- 深度学习方法:受限玻尔兹曼机RBM(三)模型求解,Gibbs sampling
- 文件上传命令rz和下载命令sz的安装
- 2021.08.23学习内容Pytorch与Torch的关系以及Torchvision作用
- 16、React Native实战之TextInput组件
- oracle查zw001密码,【Oracle错误集锦】:ORA-00119amp;ORA-00132-一团网
- 当SQLServer判断不等于遇到null的时候
- Facebook 实时聊天架构日均处理数十亿条消息!
- android开发实现选择列表,Android使用RecyclerView实现列表数据选择操作
- 《Android Jetpack》— Android 书籍
- atitit 项目团队管理之道.docx
- 3.格式化输出 年月日
- mysql5.5创建学生情况表_数据库中创建一个学生表
- 万能音视频转换器:Permute 3 for mac
- 优化移动网站的9大窍门(转)
- 利用python的requests爬取高清壁纸
- U3D学习项目一:2D横版小狐狸闯关游戏(代码部分一)