在PHP编程中,数组黑名单和白名单是一种常见的数据处理方式,特别是在处理数据库查询结果时。这些概念用于过滤或保留数组中的特定元素,根据是否包含在预定义的列表中。以下是对这两个概念的详细解释以及如何在PHP中实现它们。 **数组黑名单**: 数组黑名单是指从源数组中移除指定键值对的集合。在给定的示例中,`array_black_list` 函数实现了这个功能。它接收两个参数:一个源数组 `$arr` 和一个黑名单数组 `$list`。`array_diff_key` 函数被用来找出那些不在黑名单 `$list` 中的键,并返回一个新的只包含这些键的数组。 ```php public function array_black_list(Array $arr, Array $list){ return array_diff_key($arr, array_flip($list)); } ``` 在这里,`array_flip` 用于将黑名单数组的值(原本的键)转换为键,这样 `array_diff_key` 就能比较源数组的键和黑名单的键,然后返回不匹配的键对应的值。 **数组白名单**: 数组白名单则相反,它保留源数组中指定键值对的集合。`array_white_list` 函数实现了这个功能。同样接收源数组 `$arr` 和白名单数组 `$list`,然后使用 `array_intersect_key` 函数找出并返回那些存在于白名单中的键及其对应的值。 ```php public function array_white_list(Array $arr, Array $list){ return array_intersect_key($arr, array_flip($list)); } ``` 与黑名单函数一样,这里也使用了 `array_flip` 来转换白名单,然后 `array_intersect_key` 检查源数组的键是否存在于白名单中。 **数据格式转换**: 在数据库查询中,特别是LEFT JOIN操作后,可能会得到重复的数据行。为了优化数据结构,我们可以使用上述的黑名单和白名单函数。`dealRepeatData` 函数展示了如何处理这种数据。它的目的是将根据主键分组的重复数据转换为嵌套数组的形式。 ```php public function dealRepeatData(Array $data, Array $fieldArr, $primary_key = 'id', $repeat_name = 'repeat_info'){ $res = []; foreach ($data as $nre) { $res[$nre[$primary_key]] = $res[$nre[$primary_key]] ?? $this->array_black_list($nre, $fieldArr); } // 未完成的代码... } ``` 这个函数首先通过黑名单函数处理每条数据,移除非指定字段 `$fieldArr` 的元素。然后,它将结果存储在一个新的数组 `$res` 中,数组的键是原始数据的主键值。接下来,应该使用白名单函数收集并合并重复的值,但这部分代码在给出的示例中缺失。 要完成这个转换,可以在循环内部添加另一层处理,检查当前数据行是否已经存在 `$res` 中,如果存在,则使用白名单函数收集重复的值并添加到 `$repeat_name` 字段。 ```php // 完整的dealRepeatData函数 public function dealRepeatData(Array $data, Array $fieldArr, $primary_key = 'id', $repeat_name = 'repeat_info'){ $res = []; foreach ($data as $nre) { $key = $nre[$primary_key]; $res[$key] = $res[$key] ?? $this->array_black_list($nre, $fieldArr); if (isset($res[$key][$repeat_name])) { $res[$key][$repeat_info][] = $this->array_white_list($nre, $fieldArr); } else { $res[$key][$repeat_name] = [$this->array_white_list($nre, $fieldArr)]; } } return $res; } ``` 这个完整的函数首先确保了每个主键都有一个对应的数组,然后检查当前数据行是否包含重复信息。如果是,就将其添加到 `$repeat_name` 字段的数组中,如果不是,就创建一个新的数组并添加该数据。 总结,PHP中的数组黑名单和白名单提供了灵活的数据过滤机制,可以用于处理数据库查询结果,特别是需要对重复数据进行结构化整理的场景。`array_black_list` 和 `array_white_list` 函数分别用于移除或保留指定的键值对,而 `dealRepeatData` 函数展示了如何结合这两种方法来优化数据结构。
























- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- springboot-基于BS的社区物业管理系统(源码+sql脚本).zip
- tencentcloud-iot-sdk-embedded-c-master.zip
- 初学者指南:18um工艺下Bandgap带隙基准电压与参考电路设计及仿真技巧
- springboot-基于java的校园服务平台(源码+sql脚本).zip
- 电驱动车辆主动前轮转向(AFS)与主动后轮转向(ARS)的仿真搭建与LQR控制方法设计 仿真建模 终极版
- 一维CNN迁移学习在轴承故障诊断中的应用:基于PyTorch的域适应联合对齐实践
- linux-headers-6.14.0-24-6.14.0-24.24-all.deb
- GD32F470 RT-thread 4.1.1 修改带有dma接收的驱动
- linux-headers-6.14.0-24-generic-6.14.0-24.24-amd64.deb
- linux-image-6.14.0-24-generic-6.14.0-24.24-amd64.deb
- 同步旋转坐标系下无位置传感器永磁同步电机控制:三相电压重构技术及其MATLAB实现
- 4.19.191.ko
- 基于Matlab的计算机视觉单指针百分数表盘识别系统:霍夫变换与GUI设计
- ### 苏州华芯微电子股份有限公司射频产品介绍
- linux-modules-6.14.0-24-generic-6.14.0-24.24-amd64.deb


