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+AJAX聊天程序[聊天室]提供下载
Jul 21 PHP
php获取当前网址url并替换参数或网址的方法
Jun 06 PHP
在PHP中使用curl_init函数的说明
Nov 02 PHP
PHP第一季视频教程(李炎恢+php100 不断更新)
May 29 PHP
php配合jquery实现增删操作具体实例
Dec 12 PHP
php常用的url处理函数总结
Nov 19 PHP
thinkphp使用literal防止模板标签被解析的方法
Nov 22 PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 PHP
php提交post数组参数实例分析
Dec 17 PHP
PHP 断点续传实例详解
Nov 11 PHP
PHP封装的mysqli数据库操作类示例
Feb 16 PHP
tp5框架的增删改查操作示例
Oct 31 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实现读取和编写XML DOM代码
2010/04/07 PHP
具有时效性的php加密解密函数代码
2013/06/19 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
jquery动态加载图片数据练习代码
2011/08/04 Javascript
使用jquery.qrcode生成彩色二维码实例
2014/08/08 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
jQuery()方法的第二个参数详解
2015/04/29 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python实现快速排序算法及去重的快速排序的简单示例
2016/06/26 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
django如何连接已存在数据的数据库
2018/08/14 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
python属于解释语言吗
2020/06/11 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
PyTorch安装与基本使用详解
2020/08/31 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
2014年服务员个人工作总结
2014/12/23 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
高一军训口号
2015/12/25 职场文书
信息技术课教学反思
2016/02/23 职场文书
Node实现搜索框进行模糊查询
2021/06/28 Javascript
解决flex布局中子项目尺寸不受flex-shrink限制
2022/05/11 HTML / CSS