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 array 的加法操作代码
Jul 24 PHP
php学习笔记 PHP面向对象的程序设计
Jun 13 PHP
PHP中文件缓存转内存缓存的方法
Dec 06 PHP
二招解决php乱码问题
Mar 25 PHP
str_replace只替换一次字符串的方法
Apr 09 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
Jun 23 PHP
IIS下PHP的三种配置方式对比
Nov 20 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
Jul 04 PHP
php微信公众平台开发之获取用户基本信息
Aug 17 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
Jan 07 PHP
PHP入门教程之会话控制技巧(cookie与session)
Sep 11 PHP
Thinkphp5框架使用validate实现验证功能的方法
Aug 27 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 include加载文件两种方式效率比较
2010/08/08 PHP
PHP第一季视频教程(李炎恢+php100 不断更新)
2011/05/29 PHP
如何使用php输出时间格式
2013/08/31 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
js style动态设置table高度
2014/10/21 Javascript
DOM基础教程之事件类型
2015/01/20 Javascript
jquery实现经典的淡入淡出选项卡效果代码
2015/09/22 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
JS组件Bootstrap实现图片轮播效果
2016/05/16 Javascript
JavaScript实战(原生range和自定义特效)简单实例
2016/08/21 Javascript
webpack+vue.js实现组件化详解
2016/10/12 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
python中while和for的区别总结
2019/06/28 Python
由面试题加深对Django的认识理解
2019/07/19 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
python+OpenCV实现图像拼接
2020/03/05 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
python 实现控制鼠标键盘
2020/11/27 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
欧缇丽美国官网:Caudalie美国
2016/12/31 全球购物
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
白血病募捐倡议书
2014/05/14 职场文书
党章培训心得体会
2014/09/04 职场文书
党支部三严三实对照检查材料思想汇报
2014/09/29 职场文书
三好学生主要事迹材料
2015/11/03 职场文书
银行求职信怎么写
2019/06/20 职场文书
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript