You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 10:40:58