PHP数组删除所有匹配元素并重置索引的实现方法
移除数组中值为0的元素并重置索引
问题场景
给定数组:
$array = array("a", "b", 0, "c", 0);
需要移除所有值为0的元素,并重置剩余元素的索引,期望结果:
Array ( [0] => a [1] => b [2] => c )
尝试使用array_diff($bal_units, array(0));未成功。
失败原因
array_diff()采用松散比较(==),PHP会自动转换类型:字符串会被转为数字,比如"a"会被转为0,此时"a" == 0成立,导致非0的字符串元素也被错误过滤,这就是该方法失效的核心原因。
解决方案
方案1:使用array_filter+array_values(推荐)
通过严格判断(!==)筛选元素,再用array_values重置索引:
$array = array("a", "b", 0, "c", 0); $result = array_values(array_filter($array, function($value) { return $value !== 0; })); print_r($result);
方案2:手动遍历过滤
直接遍历数组,将符合条件的元素存入新数组,新数组自动生成连续索引:
$array = array("a", "b", 0, "c", 0); $result = []; foreach ($array as $value) { if ($value !== 0) { $result[] = $value; } } print_r($result);
内容的提问来源于stack exchange,提问作者arunpaudel
相关产品推荐
相关产品推荐

