如何在PHP中根据键值过滤索引数组:保留parentType为SITE的元素
PHP数组过滤:保留parentType为SITE的元素
需求说明
从给定的多维数组中移除所有parentType值为COMPONENT的元素,仅保留parentType为SITE的数组项。
输入数组
$arr = Array( [0] => Array( [parentType] => SITE [name] => PV Meter ), [1] => Array( [parentType] => COMPONENT [name] => Inverter-01 ), [3] => Array( [parentType] => SITE [name] => Inverter-02 ), [4] => Array( [parentType] => COMPONENT [name] => Inverter-02 ) );
问题分析
你之前尝试的方法存在的问题:
array_diff:仅适用于一维数组的差集对比,无法处理多维数组的条件过滤。unset($array['parentType']):只是删除了单个元素内的parentType键,并没有移除整个不符合条件的数组项。- 原foreach循环:仅做了数组内容输出,没有添加条件判断和过滤逻辑,无法实现需求。
解决方案
方法一:foreach循环手动过滤
遍历原数组,判断每个元素的parentType值,符合条件的加入新数组:
$filteredArr = []; foreach ($arr as $item) { if ($item['parentType'] === 'SITE') { $filteredArr[] = $item; } } // 输出结果 print_r($filteredArr);
方法二:使用array_filter函数(更简洁)
利用PHP内置的array_filter函数,通过回调函数指定过滤条件,最后用array_values重置索引:
$filteredArr = array_filter($arr, function($item) { return $item['parentType'] === 'SITE'; }); // 重置索引,得到连续的数字索引 $filteredArr = array_values($filteredArr); // 输出结果 print_r($filteredArr);
最终输出
两种方法都会得到你期望的结果:
$arr = Array( [0] => Array( [parentType] => SITE [name] => PV Meter ), [1] => Array( [parentType] => SITE [name] => Inverter-02 ) );
内容的提问来源于stack exchange,提问作者Sathish Selvam
相关产品推荐
相关产品推荐

