PHP过滤多维数组含code=404子数组时出现未定义索引错误如何解决
问题原因
你的数组中只有待删除的错误子数组才包含code键,其余正常业务子数组(携带id、id_dossier字段)不存在该键,直接访问未定义的数组索引就会触发PHP的Undefined index等级通知。虽然逻辑上不存在的键取值为null,和404比较后结果符合你的过滤预期,但PHP仍然会抛出对应提示。
修复方案
1. array_filter版本修复
先判断code键存在再做值对比:
$final_array = array_filter($final_array, function ($var) { // 仅当code键存在且值等于404时才过滤该子数组 return !(isset($var['code']) && $var['code'] == '404'); });
如果你使用的是PHP7.0及以上版本,也可以用NULL合并运算符简化写法:
$final_array = array_filter($final_array, function ($var) { return ($var['code'] ?? '') != '404'; });
2. foreach版本修复
增加键存在判断即可:
foreach ($final_array as $thisArrIndex=>$subArray) { if (isset($subArray['code']) && $subArray['code'] == "404" ) { unset($final_array[$thisArrIndex]); } }
可选优化
array_filter和unset操作都会保留数组原有的数字索引,如果你需要过滤后的数组索引重置为连续的0、1序列,可以在过滤逻辑后补充一行代码:
$final_array = array_values($final_array);
内容的提问来源于stack exchange,提问作者Jandon
相关产品推荐
相关产品推荐

