PHP如何删除元素数量小于2的数组项,仅保留长度≥2的数组元素
核心问题排查
你原有代码的逻辑存在3处错误:
- 遍历时未获取子项对应的键名,无法精准删除单条不符合要求的元素
- 判断条件写的是统计根数组
$admin_data的长度,而非判断每个子项自身的元素数量 - 直接调用
unset($admin_data)会清空整个数组,完全不符合筛选要求
修复后代码
方案1:foreach遍历处理(逻辑更直观)
foreach ($admin_data as $key => $item) { // 仅统计当前子项的元素数,小于2就删除对应键 if (count($item) < 2) { unset($admin_data[$key]); } } // 如果你需要处理后数组的索引从0重新排序,可以加下面这行,不需要就省略 $admin_data = array_values($admin_data); // 打印验证结果 echo "<pre>";print_r($admin_data);
方案2:array_filter内置函数实现(代码更简洁)
$admin_data = array_filter($admin_data, function($item) { // 保留元素数大于等于2的子项 return count($item) >= 2; }); // 打印验证结果 echo "<pre>";print_r($admin_data);
注意事项
如果你的子项是stdClass对象而非数组,需要把count($item)替换为count((array)$item)即可正常统计。
内容的提问来源于stack exchange,提问作者uzthegeek
相关产品推荐
相关产品推荐

