如何基于多维白名单从多维数组中移除指定元素?
解决方案:基于多维白名单过滤数组
这里有个直接可行的PHP实现方案,能精准按照你的白名单保留对应元素,移除其余内容:
// 初始化存储过滤结果的空数组 $filteredArray = []; // 遍历白名单中的每个分组 foreach ($this->conditionalFieldsWhitelist as $groupName => $allowedFieldNames) { // 先确认目标数组中存在当前分组,避免Undefined index错误 if (isset($myArray[$groupName])) { // 过滤当前分组下的字段条目,仅保留field_name在白名单内的项 $filteredGroupItems = array_filter($myArray[$groupName], function($fieldItem) use ($allowedFieldNames) { return in_array($fieldItem['field_name'], $allowedFieldNames); }); // 仅当过滤后有有效条目时,才添加到结果数组(可选,若想保留空分组可去掉判断) if (!empty($filteredGroupItems)) { // 用array_values重置索引,避免array_filter留下的非连续索引(可选) $filteredArray[$groupName] = array_values($filteredGroupItems); } } } // 最终$filteredArray就是过滤后的目标数组
代码逻辑解释:
- 只处理白名单内的分组:通过遍历白名单的分组,自动忽略原数组中不在白名单里的分组,确保结果只包含你需要的分组。
- 精准筛选字段条目:利用
array_filter结合闭包,检查每个字段条目的field_name是否属于当前分组的白名单列表,不符合的直接被过滤掉。 - 避免空分组(可选):加入
!empty($filteredGroupItems)判断,防止过滤后为空的分组出现在结果里;如果需要保留空分组,去掉这个判断即可。 - 重置索引(可选):
array_values会把过滤后的数组索引重新整理为连续的数字,如果你不需要保持原索引,可以省略这一步。
测试示例:
用你提供的输入数据测试的话,$filteredArray最终会和原$myArray一致,因为contact_name在白名单的Basic Fields分组里;如果原数组的Basic Fields里还有其他field_name不在白名单的条目,就会被自动移除。
内容的提问来源于stack exchange,提问作者Bird87 ZA
相关产品推荐
相关产品推荐

