PHP中使用array_filter时,无匹配值如何返回原数组?
解决array_filter无匹配时返回原数组的问题
你直接修改array_filter的回调函数是行不通的,因为array_filter的回调只能返回布尔值(true/false),用来决定当前元素是否被保留,没法直接返回整个数组。正确的做法是先执行过滤,再判断过滤结果是否为空,为空就替换成原数组。
修改后的代码如下:
// $Myitems 是目标数组 $make = '3'; // 执行原有过滤逻辑 $MyfilterMain = array_filter($Myitems, function($item) use($make) { $extra_fields_decode = json_decode($item['extra_fields'], true); $main_value = $extra_fields_decode['1']['value']; return $main_value == $make; }); // 过滤结果为空则返回原数组,否则保留过滤结果 $MyfilterMain = empty($MyfilterMain) ? $Myitems : $MyfilterMain;
补充说明:
- 把回调函数的参数名从
$Myitems改成了$item,避免和外部的数组变量重名,代码更清晰规范。 - 用
empty()判断过滤后的数组是否无元素,为空时就将原数组赋值给$MyfilterMain,这样后续的array_slice等操作可以直接使用这个变量。
内容的提问来源于stack exchange,提问作者Alines
相关产品推荐
相关产品推荐

