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默认安装产生系统漏洞
Oct 09 PHP
PHP的面试题集,附我的答案和分析(一)
Nov 19 PHP
php zend解密软件绿色版测试可用
Apr 14 PHP
PHP 文件上传源码分析(RFC1867)
Oct 30 PHP
PHP笔记之:基于面向对象设计的详解
May 14 PHP
php cli 小技巧
Jun 03 PHP
解析php中heredoc的使用方法
Jun 17 PHP
php检查日期函数checkdate用法实例
Mar 19 PHP
遍历echsop的region表形成缓存的程序实例代码
Nov 01 PHP
php实现数据库的增删改查
Feb 26 PHP
PHP注释语法规范与命名规范详解篇
Jan 21 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
May 25 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
PHP学习之PHP变量
2006/10/09 PHP
一家之言的经验之谈php+mysql扎实个人基本功
2008/03/27 PHP
使用Sphinx对索引进行搜索
2013/06/25 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
2020/03/16 PHP
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
VUE 解决mode为history页面为空白的问题
2019/11/01 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
Python实现的简单文件传输服务器和客户端
2015/04/08 Python
Python实现短网址ShortUrl的Hash运算实例讲解
2015/08/10 Python
Python的MongoDB模块PyMongo操作方法集锦
2016/01/05 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
2016/07/12 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
Python批量发送post请求的实现代码
2018/05/05 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
2018/07/10 Python
python opencv旋转图像(保持图像不被裁减)
2018/07/26 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
Python读取系统文件夹内所有文件并统计数量的方法
2018/10/23 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
Python Scrapy框架第一个入门程序示例
2020/02/05 Python
python如何删除文件、目录
2020/06/23 Python
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
2014年房地产销售工作总结
2014/12/01 职场文书
地方课程教学计划
2015/01/19 职场文书
龙门石窟导游词
2015/02/02 职场文书
求职简历自我评价2015
2015/03/10 职场文书
2015年乡镇科普工作总结
2015/05/13 职场文书
2019新员工心得体会
2019/06/25 职场文书