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代码把全角数字转为半角数字
Dec 10 PHP
php 在文件指定行插入数据的代码
May 08 PHP
PHP及Zend Engine的线程安全模型分析
Nov 10 PHP
PHP 观察者模式的实现代码
May 10 PHP
PHP数组相关函数汇总
Mar 24 PHP
php通过排列组合实现1到9数字相加都等于20的方法
Aug 03 PHP
Zend Framework动作助手Redirector用法实例详解
Mar 05 PHP
PHP简单判断手机设备的方法
Aug 23 PHP
PHP实现的日历功能示例
Sep 01 PHP
PHP实现通过文本文件统计页面访问量功能示例
Feb 13 PHP
PHP实现获取url地址中顶级域名的方法示例
Jun 05 PHP
PHP进阶学习之Geo的地图定位算法详解
Jun 19 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面向对象全攻略 (七) 继承性
2009/09/30 PHP
PHP跨时区(UTC时间)应用解决方案
2013/01/11 PHP
探讨:使用XMLSerialize 序列化与反序列化
2013/06/08 PHP
js玩一玩WSH吧
2007/02/23 Javascript
html中的input标签的checked属性jquery判断代码
2012/09/19 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
2015/06/10 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
2017/01/05 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
NodeJS 实现手机短信验证模块阿里大于功能
2017/06/19 NodeJs
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
vue实现微信二次分享以及自定义分享的示例
2019/03/20 Javascript
在Angular中实现一个级联效果的下拉框的示例代码
2020/05/20 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
python使用nntp读取新闻组内容的方法
2015/05/08 Python
python实现统计代码行数的方法
2015/05/22 Python
Python3读取文件常用方法实例分析
2015/05/22 Python
python编程开发之类型转换convert实例分析
2015/11/13 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
完美解决keras 读取多个hdf5文件进行训练的问题
2020/07/01 Python
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
北京鼎普科技股份有限公司软件测试面试题
2012/04/07 面试题
市场营销专业个人自荐信格式
2013/09/21 职场文书
六查六看自查报告
2014/10/14 职场文书
趣味运动会口号
2015/12/24 职场文书
2019年思想汇报
2019/06/20 职场文书
python3中apply函数和lambda函数的使用详解
2022/02/28 Python