技术文章
当前位置:首页 > PHP编程文章 > PHP数组黑、白名单实现方法

PHP数组黑、白名单实例代码

  • 发布时间:
  • 作者:码农之家原创
  • 点击:195

这篇文章主要知识点是关于php、数组、黑名单、白名单、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Learning PHP设计模式
Learning PHP设计模式高质量中文版
  • 类型:PHP编程大小:39.4 MB格式:PDF出版:中国电力出版社作者:William Sanders
立即下载

更多PHP相关的学习资源可以参阅 PHP电子书程序设计电子书 等栏目。

PHP数组黑、白名单实现方法

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的全部知识点内容总结,大家还可以在下方相关文章里找到thinkPHP5.0框架验证码及点击、 php调用快递鸟接口实例分、 PHP7引入的"??"和"?:"的、 等php文章进一步学习,感谢大家的阅读和支持。

上一篇:php WebUploader实现图片批量上传实例方法

下一篇:Laravel自定义command命令代码详解

展开 +

收起 -

相关电子书
学习笔记
网友NO.347942

浅谈php数组array_change_key_case() 函数和array_chunk()函数

如下所示: ?php /* array_change_key_case() 返回其键均为大写或小写的数组。 array array_change_key_case(array input[,int case]) 参数描述:array是要转换键值的数组 case有两个选项:CASE_LOWER,默认选项,以小写字母返回数组的键 CASE_UPPER,以大写字母返回数组的键 */ $input_array = array('a'='Java', 'B'='Php', 'c'='C++', 'D'='C#'); print_r(array_change_key_case($input_array, CASE_LOWER)); print_r(array_change_key_case($input_array, CASE_UPPER)); //如果在运行该函数时两个或多个键相同,则最后的元素会覆盖其他元素,例如: $input_array = array('a'='Barcelona', 'B'='Madrid', 'c'='Manchester', 'b'='Milan'); print_r(array_change_key_case($input_array, CASE_LOWER)); ? 运行结果: ?php /* array_chunk() 把一个数组分割成新的数组块 array array_chunk(array $array,int $size[,bool preserve_key]) 参数描述:array是分割的数组 size规定每个新数组包含的元素,最后一个数组可能……

网友NO.697554

深入了解PHP中的Array数组和foreach

1. 了解数组 PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。详细的解释可参见:PHP.net中的Array数组 。 2.例子:一般的数组 这里,我通过一个简单的例子,并使用图形方式来了解数组。 $a = array(3 = 'a', 1 = 'b', 2 = 'c');echo var_dump($a); [注]:使用箭头描述数组$a各个单元对应某一内存地址的数据值(实际上,它内部结构采用HashTable结构,可以参考鸟哥写的PHP中的Hash算法)。 3.例子:在数组定义中,添加引用。 $x = 'x';$a = array(3 = 'a', 1 = gt; 'c');echo "hr";echo var_dump($a);$x = 'y';echo var_dump($a); 数组$a中的第2个单元$a[1]与$x对应的是同一个数据,使用 var_dump( $a) 的时候,会看到数组的第2个单元多个string(1) "x",表示引用。 当 修改$x的值='y',也等同于修改$a[1]的值='y'。 下图可以清楚的描述这一变化: 4.例子:使用foreach遍历数组。 $a = array(3 =……

网友NO.617403

ThinkPHP连接数据库操作示例【基于DSN方式和数组传参的方式】

本文实例讲述了ThinkPHP连接数据库操作。分享给大家供大家参考,具体如下: 一 代码 1、完成入口函数的编写 ?phpdefine('THINK_PATH', '../ThinkPHP'); //定义ThinkPHP框架路径(相对于入口文件)define('APP_NAME', 'App'); //定义项目名称define('APP_PATH', './App'); //定义项目路径require(THINK_PATH."/ThinkPHP.php"); //加载框架入口文件App::run(); //实例化一个网站应用实例? 2、完成控制器的编写 ?phpheader("Content-Type:text/html; charset=utf-8"); //设置页面编码格式class IndexAction extends Action{ public function index(){ $db_dsn="mysql://root:root@127.0.0.1:3306/db_database30"; //定义DSN $db = new Db(); //执行类的实例化 $conn=$db-getInstance($db_dsn); //连接数据库,返回数据库驱动类 $select=$conn-query('select * from think_user'); //执行查询语句 $this-assign('select',$select); // 模板变量赋值 $this-display(); // 指定模板页 } public function type(){ $dsn = array( '……

网友NO.260352

PHP多维数组元素操作类的方法

我的框架里面一个多维数组元素操作类,主要用于读取数组中配置数据,可以通过字符串节点的方式:a.b.c 来获取和设置元素,以及多维数组的覆盖,有需求的可以参考下吧! ?php/** * Created by PhpStorm. * User: ZHOUZ * Date: 14-5-25 * Time: 下午5:32 */namespace Snail\Component;/** * 多维数组节点读写 * Class Node * @package Snail\Component */class Node extends AComponent{ /** * 多维数组节点分隔符 * @var string */ const SP = '.'; /** * 将非字符串类型数据生成字符串节点 * code * Node::create(array('a', 'b', 1, true)) = 'a.b.1.1' * Node::create('a', 'b', null, false) = 'a.b' * /code * @param mixed $nodes 支持数组、任意参数个数 * @return string */ public static function create($nodes) { ! is_array($nodes) $nodes = func_get_args(); return join(static::SP, array_filter(array_map('strval', $nodes))); } /** * 获取多维数组节点转化为数组键名 * @param string $node * @return array……

<
1
>

Copyright 2018-2020 xz577.com 码农之家

电子书资源由网友、会员提供上传,本站记录提供者的基本信息及资源来路

鸣谢: “ 码小辫 ” 公众号提供回调API服务、“ 脚本CDN ”提供网站加速(本站寻求更多赞助支持)

版权投诉 / 书籍推广 / 赞助:520161757@qq.com

上传资源(网友、会员均可提供)

查看最新会员资料及资源信息