如何删除PHP数组元素后重新排序自定义键名?
解决方法
首先纠正你代码里的一个小错误:unset($key) 不会删除数组里的元素,你需要用 unset($user_list[$key]) 才能真正移除目标元素。
接下来分两步实现你的需求:
步骤1:删除指定user_id的元素
先正确删除匹配的元素,代码如下:
$user_list = [ "user_1" => ["user_id" => 1234], "user_2" => ["user_id" => 1324], "user_3" => ["user_id" => 3321] ]; $user_id = 1324; // 要删除的user_id foreach($user_list as $key => $value){ if($value["user_id"] == $user_id){ unset($user_list[$key]); // 操作原数组的键才能删除元素 } }
步骤2:重新生成有序的键名
删除元素后,数组的键会变成user_1、user_3这种不连续的状态,我们需要重新生成user_1、user_2这样的顺序键。可以先提取数组的所有值,再循环重新赋值新键:
// 提取删除后的数组值,此时会生成索引从0开始的连续数组 $new_users = array_values($user_list); // 重新构建带有序键的数组 $user_list = []; foreach($new_users as $index => $user){ $user_list["user_" . ($index + 1)] = $user; }
完整代码
把两步合并起来就是完整的解决方案:
$user_list = [ "user_1" => ["user_id" => 1234], "user_2" => ["user_id" => 1324], "user_3" => ["user_id" => 3321] ]; $user_id = 1324; // 目标删除的user_id // 删除指定元素 foreach($user_list as $key => $value){ if($value["user_id"] == $user_id){ unset($user_list[$key]); } } // 重新排列键名 $new_users = array_values($user_list); $user_list = []; foreach($new_users as $i => $user){ $user_list["user_" . ($i + 1)] = $user; } // 输出结果 print_r($user_list);
执行后就能得到你想要的结果:
Array ( [user_1] => Array ( [user_id] => 1234 ) [user_2] => Array ( [user_id] => 3321 ) )
内容的提问来源于stack exchange,提问作者mzgalang
相关产品推荐
相关产品推荐

