PHP 数组黑名单/白名单实例代码详解


Posted in PHP onJune 04, 2019

php里经常通过join查询得到的数据, 会有这种情况:

$data = [
  {id=>1,name=>a,age=>a},
  {id=>1,name=>b,age=>b},
  {id=>2,name=>c,age=>c},
  {id=>3,name=>f,age=>f},
  {id=>2,name=>d,age=>d},
];

这种格式的数据其实很常见, 实际上我们想要的数据效果是:

$data = [
  [id=>1,user_info=>[[name=>a,age=>a],[name=>b,age=>b]]],
  [id=>2,user_info=>[[name=>c,age=>c],[name=>d,age=>d]]],
  [id=>3,user_info=>[[name=>f,age=>f]]],
];

于是我们需要各种foreach处理其中函数;

这里记录一下, 两个函数

数组的黑名单:

/**
 * 数组获取黑名单内的数据
 * @param array $arr 源数组
 * @param array $list 白名单
 * @return array
 * @example
 * $arr = ['a'=>1,'b'=>2,'c'=>3,'d'=>4]
 * $list = ['d','c'];
 * $return = ['a'=>1,'b'=>2];
 */
public function array_black_list(Array $arr, Array $list)
{
  return array_diff_key($arr, array_flip($list));
}

数组的白名单

/**
 * 数组获取白名单内的数据
 * @param array $arr 源数组
 * @param array $list 白名单
 * @return array
 * @example
 * $arr = ['a'=>1,'b'=>2,'c'=>3,'d'=>4]
 * $list = ['d','c'];
 * $return = ['c'=>3,'d'=>4];
 */
public function array_white_list(Array $arr, Array $list)
{
  return array_intersect_key($arr, array_flip($list));
}

利用黑名单和白名单, 可以很容易实现上述数据格式转换:

/**
 * repeat数据处理(一般是leftJoin数据结构完善)
 * leftJoin 查询出来的多组数据, 根据primary_id进行数据结构修改, 保存为 字段=>[{},{},{}]类似结构
 * 效果:$data = [{id=>1,name=>a,age=>a},{id=>1,name=>b,age=>b},{id=>2,name=>c,age=>c},{id=>3,name=>null,age=>null}],$fieldArr = ['name','age']
 * return [{id=>1,repeat_info=>[{name=>a,age=>a},{name=>b,age=>b}]},{id=>2,repeat_info=>[{name=>c,age=>c}]},{id=>3,repeat_info=>[]}]
 * @param $data  array 原数据;
 * @param $fieldArr array 需要的字段,
 * @param string $primary_key 重复的数据 凭证;(一般用主键id)
 * @param string $repeat_name 重复的数据要保存数组的 字段名
 * @return array
 */
public function dealRepeatData(Array $data, Array $fieldArr, $primary_key = 'id', $repeat_name = 'repeat_info')
{
  $res = [];
  //通过黑名单获取不重复的值, 归并到按id分类的数组里;
  foreach ($data as $nre) {
    $res[$nre[$primary_key]] = $res[$nre[$primary_key]] ?? $this->array_black_list($nre, $fieldArr);
  }
  //通过白名单获取重复的值, 归并到黑名单的$repeat_name 字段里;
  foreach ($data as $re) {
    $res[$re[$primary_key]][$repeat_name][] = $this->array_white_list($re, $fieldArr);
  }
  return array_values($res);
}

总结

以上所述是小编给大家介绍的PHP 数组黑名单/白名单实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
用PHP+MySql编写聊天室
Oct 09 PHP
让PHP支持页面回退的两种方法[转]
Feb 14 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
Jun 23 PHP
php随机取mysql记录方法小结
Dec 27 PHP
PHP获取页面执行时间的方法(推荐)
Dec 10 PHP
解决微信授权回调页面域名只能设置一个的问题
Dec 11 PHP
ThinkPHP实现附件上传功能
Apr 27 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
Jun 15 PHP
详细解读php的命名空间(一)
Feb 21 PHP
laravel 5.5 关闭token的3种实现方式
Oct 24 PHP
php屏蔽错误及提示的方法
May 10 PHP
thinkphp5 redis缓存新增方法实例讲解
Mar 24 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
Jun 03 #PHP
PHP使用CURL实现下载文件功能示例
Jun 03 #PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
Jun 03 #PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
Jun 03 #PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
Jun 03 #PHP
PHP工厂模式、单例模式与注册树模式实例详解
Jun 03 #PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
May 31 #PHP
You might like
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
让你同时上传 1000 个文件 (一)
2006/10/09 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
PHP中防止SQL注入实现代码
2011/02/19 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
初识PHP中的Swoole
2016/04/05 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
Laravel实现ORM带条件搜索分页
2019/10/24 PHP
javascript 正则表达式相关应介绍
2012/11/27 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
js获取IP地址的方法小结
2014/07/01 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
AngularJS数据源的多种获取方式汇总
2016/02/02 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
js选择器全面解析
2016/06/27 Javascript
在vue中获取dom元素内容的方法
2017/07/10 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
2018/08/22 Javascript
layer 关闭指定弹出层的例子
2019/09/25 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
[01:08]DOTA2次级职业联赛 - Wings 战队宣传片
2014/12/01 DOTA
python二维列表一维列表的互相转换实例
2018/07/02 Python
Django forms组件的使用教程
2018/10/08 Python
pytorch打印网络结构的实例
2019/08/19 Python
使用python切片实现二维数组复制示例
2019/11/26 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
如何写出高质量、高性能的MySQL查询
2014/11/17 面试题
理工大学毕业生自荐信
2013/11/01 职场文书
白酒营销策划方案
2014/08/17 职场文书
开展警示教育活动总结
2015/05/09 职场文书
初中体育教学随笔
2015/08/15 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
导游词之山东红叶谷
2019/10/31 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书