踩坑:array_reverse 转换改变了数值键问题

起因:应用中,有一个数据是使用数组的键名来unset删除的,大概是这样 unset($arr[$key]) ,但是点击删除,并没被删除

经过我debug后,发现是array_reverse函数的问题,下面我复现一下错误:

$arr = [
    "aaa" => 111,
    "bbb" => 222,
    "2021" => 333,
    "ccc" => 444
];

$arr1 = array_reverse($arr);
var_dump($arr1);
/*array(4) {
  ["ccc"]=>
  int(444)
  [0]=>
  int(333)
  ["bbb"]=>
  int(222)
  ["aaa"]=>
  int(111)
}*/
//可以看到   "2021" => 333 变为  0=> 333 了

foreach($arr1 as $k => $v) {
    if($v==333) unset($arr[$k]);  //此时$k为0,源数组中并不存在这个键,无法删除,且这里不会报错的
}
var_dump($arr);
/*
array(4) {
  ["aaa"]=>
  int(111)
  ["bbb"]=>
  int(222)
  [2021]=>
  int(333)
  ["ccc"]=>
  int(444)
}
*/

我们再看看有多个数值键的情况:
踩坑:array_reverse 转换改变了数值键问题

可以得出,array_reverse对数值键,会转为初始从0开始的索引,多个就是按顺序 0,1,2,… ; 这里要特别注意 ;数值键是会改变的;

本作品采用《CC 协议》,转载必须注明作者和本文链接
六月的风
Junwind
讨论数量: 3

array_reverse()第二个参数设为true,就不会更改数字键了

3年前 评论
随波逐流

这不是坑, 用函数之前先看看文档吧 :joy: PHP函数 array_reverse

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
躺平大叔 @ 躺平社区
文章
142
粉丝
17
喜欢
107
收藏
63
排名:258
访问:3.7 万
私信
所有博文
社区赞助商