参见英文答案 > ksort produces wrong result when dealing with alphanumeric characters                                    6个

让我从一开始就告诉你:我知道这个函数的排序标志.当我使用SORT_STRING时,它运行良好,但默认标志SORT_REGULAR很奇怪,或根本不起作用.

考虑如下的数组.

$arr = [

'27a' => 'foo',

'27b' => 'foo',

'27c' => 'foo',

'27' => 'foo',

];

当我尝试使用kso​​rt进行排序时,它会给出一个数组,而不会以任何明显的逻辑进行排序.

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意外行为相关推荐

  1. php7.0开发手册手机版_PHP7.0版本备注

    这篇文章主要介绍了PHP7.0版本备注,新版本发布在性能方面大大提升,同时在语言特性方面也改变了不少,以下内容是LCT翻译对官方版本升级备注,需要的朋友可以参考 PHP7.0新版本不仅在性能方面大大提 ...

  2. CentOS7 php7.0 升级到php7.3

    不要问我为什么要升级,我不是运维.如果你也不是运维的话,而且是公司的服务器的话,那你还是要慎重啊,我他么的就这样填了一天的坑,简单记录一下这坑爹的一天 备份之前的php7.0(这很重要,非常重要) 如 ...

  3. Linux环境PHP7.0安装

    PHP7和HHVM比较 PHP7的在真实场景的性能确实已经和HHVM相当, 在一些场景甚至超过了HHVM.HHVM的运维复杂, 是多线程模型, 这就代表着如果一个线程导致crash了, 那么整个服务就 ...

  4. 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 ...

  5. Windows IIS7 下安装配置 PHP7.0

    确认Microsoft Visual C++版本 Microsoft Visual C++的版本至关重要,根据Microsoft Visual C++版本下载的PHP不同.        PHP官网的 ...

  6. mac os x安装php7.0和phalcon3.0

    1,安装xampp(with php7.0) 下载地址: https://www.apachefriends.org/download.html 2,安装phalcon3.0 cd ~/git clo ...

  7. php7.0 + mysql5.7.10 + nginx7.0 web开发环境搭建(CentOS7)

    一.搭建nginx开发环境 参考官方文档:http://nginx.org/en/linux_pac... 1.设置yum 官当提供了利用yum来安装.升级nginx的方法 在/etc/yum.rep ...

  8. 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 ...

  9. php 7.0 编译安装mysql_源码编译安装php7.0.5

    源码编译安装php7.0.5 源码包下载地址 安装epel扩展yum源 [root@xuegod63 ~]# yum clean all [root@xuegod63 ~]# yum list 注:R ...

最新文章

  1. python函数几个return语句_Python常用函数--return 语句-阿里云开发者社区
  2. SpringMVC学习总结(2)——SpringMVC返回json配置
  3. C#三层架构第九课之反射和工厂模式实现多数据库访问
  4. html5响应式设置meta
  5. 深度学习方法:受限玻尔兹曼机RBM(三)模型求解,Gibbs sampling
  6. 文件上传命令rz和下载命令sz的安装
  7. 2021.08.23学习内容Pytorch与Torch的关系以及Torchvision作用
  8. 16、React Native实战之TextInput组件
  9. oracle查zw001密码,【Oracle错误集锦】:ORA-00119amp;ORA-00132-一团网
  10. 当SQLServer判断不等于遇到null的时候
  11. Facebook 实时聊天架构日均处理数十亿条消息!
  12. android开发实现选择列表,Android使用RecyclerView实现列表数据选择操作
  13. 《Android Jetpack》— Android 书籍
  14. atitit 项目团队管理之道.docx
  15. 3.格式化输出 年月日
  16. mysql5.5创建学生情况表_数据库中创建一个学生表
  17. 万能音视频转换器:Permute 3 for mac
  18. 优化移动网站的9大窍门(转)
  19. 利用python的requests爬取高清壁纸
  20. U3D学习项目一:2D横版小狐狸闯关游戏(代码部分一)

热门文章

  1. 怎么在html中把3个单元格合并成2个,WPS文字怎么将两个单元格合并
  2. 微信小程序自定义搜索框(searchbar)
  3. lucene创建索引时出错:扑捉到FileNotFoundException
  4. vue-particles (多彩)粒子插件动画 使用教程
  5. 交叉表查询中的多列显示
  6. 从飞鸽传书,到5G通讯
  7. 蓝桥杯 成绩分析 python组
  8. webp格式如何转换成为jpg
  9. 常用的三种虚拟机软件的介绍
  10. 万字多图 | UML 入门指南