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 相关文章推荐
Zend Studio 无法启动的问题解决方法
Dec 04 PHP
PHPUnit PHP测试框架安装方法
Mar 23 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
Apr 24 PHP
10个实用的PHP正则表达式汇总
Oct 23 PHP
ThinkPHP提交表单时默认自动转义的解决方法
Nov 25 PHP
php可生成缩略图的文件上传类实例
Dec 17 PHP
php使用explode()函数将字符串拆分成数组的方法
Feb 17 PHP
php截取中文字符串函数实例
Feb 23 PHP
CI框架实现优化文件上传及多文件上传的方法
Jan 04 PHP
php判断文件上传图片格式的实例详解
Sep 30 PHP
详解thinkphp中的volist标签
Jan 15 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
Oct 12 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中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
2011/03/29 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
如何使用php实现评委评分器
2015/07/31 PHP
php session 写入数据库
2016/02/13 PHP
PHP上传图片、删除图片简单实例
2016/11/12 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
2017/03/15 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
Javascript公共脚本库系列(一): 弹出层脚本
2011/02/24 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
bootstrap模态框实现拖拽效果
2016/12/14 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
2017/06/04 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
vue.js iview打包上线后字体图标不显示解决办法
2020/01/20 Javascript
python mysqldb连接数据库
2009/03/16 Python
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
python标准算法实现数组全排列的方法
2015/03/17 Python
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
Python+opencv+pyaudio实现带声音屏幕录制
2019/12/23 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
keras中的History对象用法
2020/06/19 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
python计算auc的方法
2020/09/09 Python
Css3新特性应用之视觉效果实例
2016/12/12 HTML / CSS
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
幼儿园植树节活动总结
2014/07/04 职场文书
暑期政治学习心得体会
2014/09/02 职场文书
公司领导班子四风对照检查材料
2014/09/27 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python
Javascript之datagrid查询详解
2021/09/15 Javascript
nginx rewrite功能使用场景分析
2022/05/30 Servers