Laravel9环境下如何过滤含嵌套数组的关联数组(无需foreach)
当然可以,不用写foreach循环,用PHP数组函数或者Laravel集合就能搞定:
方案1:纯PHP数组函数实现
利用array_filter嵌套检查子项中是否存在数组:
$result = array_filter($data, function($item) { // 过滤出子项里的数组,只要数量大于0就保留当前元素 return !empty(array_filter($item, 'is_array')); });
方案2:更高效的存在性检查
用array_reduce提前终止检查,找到第一个数组就返回true,性能更好:
$result = array_filter($data, function($item) { return array_reduce($item, function($hasArray, $value) { // 一旦找到数组就停止迭代 return $hasArray ?: is_array($value); }, false); });
方案3:Laravel集合风格写法
既然用的是Laravel,直接转集合处理更优雅:
$result = collect($data) ->filter(fn($item) => collect($item)->contains('is_array')) ->toArray();
这几种方式都能得到你想要的结果,全程不用显式写foreach循环。
内容的提问来源于stack exchange,提问作者Lucky Person
相关产品推荐
相关产品推荐

