# 数组增强
数组增强组件主要是对数组等数据进行处理,如无限级分类操作、商品规格的迪卡尔乘积运算等。
其他产品也可以使用该组件,请登录 [GITHUB](https://github.com/houdunwang/arr) 查看源代码与说明文档。
[TOC]
# 开始使用
#### 递归数组合并
```
$a=['b'=>['b1'=>2]];
$b=['a'=>1,'b'=>['b1'=>2,'b2'=>3]];
Arr::merge($a,$b);
```
以上代码结果如下:
```
[
'a'=> 1
'b' =>['b1' => 2,'b2' => 3]
]
```
#### 根据键名获取数据
如果键名不存在时返回默认值,支持键名的点语法
```
$d=['a'=>1,'b'=>2];
Arr::get($d,'c','没有数据哟');
```
使用点语法查找:
```
$d = ['web' => [ 'id' => 1, 'url' => 'houdunwang.com' ]];
print_r(Arr::get($d,'web.url'));
```
#### 从数组中移除给定的值
```
$d = [1,2,3,4,5];
Arr::del($d,[3,4]);
//结果是 [1,2,5]
```
#### 排队字段获取数据
以下代码获取除 id、url以外的数据
```
$d = [ 'id' => 1, 'url' => 'houdunwang.com' ,'name'=>'后盾人'];
print_r(Arr::getExtName($d,['id','url']));
```
#### 设置数组元素值支持点语法
```
$data=[];
print_r(Arr::set($data,'a.b.c',99));
```
#### 改变数组键名大小写
```
Arr::keyCase(array('name'=>'houdunwang',array('url'=>'hdphp.com')),1);
第2个参数为类型: 1 大写 0 小写
```
#### 不区分大小写检测键名是否存
```
Arr::keyExists('Hd',['hd'=>'后盾网']);
```
#### 数组值大小写转换
```
Arr::valueCase(['name'=>'houdunwang'],1);
第2个参数为类型: 1 大写 0 小写
```
#### 数组进行整数映射转换
```
$data = ['status'=>1];
$d = Arr::intToString($data,['status'=>[0=>'关闭',1=>'开启']]);
```
生成的结果如下
```
$d=['status'=>1,'_status'=>'开启'];
```
#### 数组中的字符串数字转为数值类型
```
$data = ['status'=>'1','click'=>'200'];
$d = Arr::stringToInt($data);
```
#### 根据下标过滤数据元素
```
$d = [ 'id' => 1, 'url' => 'houdunwang.com','title'=>'后盾网' ];
print_r(Arr::filterKeys($d,['id','url']));
//过滤 下标为 id 的元素
```
当第三个参数为 0 时只保留指定的元素
```
$d = [ 'id' => 1, 'url' => 'houdunwang.com','title'=>'后盾网' ];
print_r(Arr::filterKeys($d,['id'],0));
//只显示id与title 的元素
```
#### 获得树状结构
```
Arr::tree($data, $title, $fieldPri = 'cid', $fieldPid = 'pid');
参数 说明
$data 数组
$title 字段名称
$fieldPri 主键 id
$fieldPid 父 id
```
示例
```
$data = [
['cid' => 1, 'pid' => 0, 'title' => '新闻'],
['cid' => 2, 'pid' => 1, 'title' => '国内新闻'],
];
$d = \houdunwang\arr\Arr::tree($data, 'title', 'cid', 'pid');
```
#### 获得目录列表
```
Arr::channelList($data, $pid = 0, $html = " ", $fieldPri = 'cid', $fieldPid = 'pid');
参数 说明
data 操作的数组
pid 父级栏目的 id 值
html 栏目名称前缀,用于在视图中显示层次感的栏目列表
fieldPri 唯一键名,如果是表则是表的主键
fieldPid 父 ID 键名
```
#### 获得多级目录列表(多维数组)
```
Arr::channelLevel($data, $pid = 0, $html = " ", $fieldPri = 'cid', $fieldPid = 'pid')
参数 说明
data 操作的数组
pid 父级栏目的 id 值
html 栏目名称前缀,用于在视图中显示层次感的栏目列表
fieldPri 唯一键名,如果是表则是表的主键
fieldPid 父 ID 键名
```
#### 获得所有父级栏目
```
Arr::parentChannel($data, $sid, $fieldPri = 'cid', $fieldPid = 'pid');
参数 说明
data 操作的数组
sid 子栏目
fieldPri 唯一键名,如果是表则是表的主键
fieldPid 父 ID 键名
```
#### 是否为子栏目
```
Arr::isChild($data, $sid, $pid, $fieldPri = 'cid', $fieldPid = 'pid')
参数 说明
data 操作的数组
sid 子栏目id
pid 父栏目id
fieldPri 唯一键名,如果是表则是表的主键
fieldPid 父 ID 键名
```
#### 是否有子栏目
```
Arr::hasChild($data, $cid, $fieldPid = 'pid')
参数 说明
data 操作的数组
cid 栏目cid
fieldPid 父 ID 键名
```
#### 迪卡尔乘积
```
Arr::descarte($arr, $tmp = array())
```
- 文档已经迁移到后盾人
- 介绍
- 框架特性
- 开发规范
- 许可协议
- 作者向军
- 安装框架
- 更新框架
- 基础
- 入口文件
- 应用配置
- 优雅链接
- 目录结构
- 系统常量
- 自动加载
- 应用密钥
- 系统函数
- CSRF保护
- 依赖注入
- 跨域访问
- 配置
- 配置文件
- 基本功能
- 扩展配置
- c 函数
- 控制器
- 定义声明
- 基本使用
- 相关函数
- 响应消息
- 路由
- 基础知识
- 基础路由
- 路由参数
- 参数检测
- 依赖注入
- 控制器
- 分组路由
- RESTful
- 别名路由
- 数据
- 配置相关
- 核心操作
- 查询构造器
- 日志记录
- 分页处理
- 事务处理
- 函数相关
- 数据库
- 数据迁移
- 数据填充
- 模型
- 定义模型
- 模型动作
- 模型验证
- 自动完成
- 自动过滤
- 字段保护
- 数据填充
- 多表关联
- 分页处理
- 仓库
- 数据仓库
- 查询规则
- 视图
- 基础知识
- 模板配置
- 模板文件
- 分配数据
- 系统标签
- 扩展标签
- 缓存模板
- 模板继承
- 视图函数
- widget
- vue组件
- 中间件
- 中间件
- 缓存
- 基本操作
- 文件缓存
- 数据表缓存
- 服务
- 服务容器
- 定制服务
- 相关函数
- 请求
- 基本使用
- 请求扩展
- 测试
- 基础知识
- 基本使用
- HTTP测试
- 调试
- 调试模式
- 日志管理
- 组件
- 多语言
- 响应处理
- Cookie
- Session
- 验证码
- XML
- 自动验证
- 文件处理
- 压缩解压
- RBAC
- 数组增强
- 分页管理
- 图像处理
- 生成静态
- 加密解密
- 字符串
- 数据集合
- 工具服务
- 目录操作
- 邮件发送
- CURL
- QQ登录
- 数据备份
- 购物车
- 日志处理
- 命令组件
- 二维码
- 后盾云
- 日期处理
- 阿里
- 支付宝
- 阿里云直播
- 阿里云短信
- 阿里云邮件
- 阿里云OSS
- SOCKET
- 启动与关闭
- 前端
- 微信