Yii的数组助手类
获取值
用原生PHP从一个对象、数组、或者包含这两者的一个复杂数据结构中获取数据是非常繁琐的。 你首先得使用isset 检查 key 是否存在, 然后如果存在你就获取它,如果不存在, 则提供一个默认返回值:

Yii 提供了一个非常方便的方法来做这件事:

方法的第一个参数是我们从哪里获取值。第二个参数指定了如何获取数据, 它可以是下述几种类型中的一个:
- 数组键名或者欲从中取值的对象的属性名称;
- 以点号分割的数组键名或者对象属性名称组成的字符串,上例中使用的参数类型就是该类型;
- 返回一个值的回调函数。
回调函数如下例所示:

第三个可选的参数如果没有给定值,则默认为 null,如下例所示:

对于取到值后想要立即从数组中删除的情况,你可以使用 remove 方法:

执行了上述代码之后, $array 将包含 ['options' => [1, 2]] 并且 $type 将会是 A 。 注意和 getValue 方法不同的是,remove 方法只支持简单键名。
检查键名的存在
ArrayHelper::keyExists 工作原理和array_key_exists差不多,除了 它还可支持大小写不敏感的键名比较,比如:

检索列
通常你要从多行数据或者多个对象构成的数组中获取某列的值,一个普通的例子是获取id值列表。

结果将是 ['123', '345']。
如果需要额外的转换或者取值的方法比较复杂, 第二参数可以指定一个匿名函数:

重建数组索引
按一个指定的键名重新索引一个数组,可以用 index 方法。输入的数组应该是多维数组或者是一个对象数组。 键名(译者注:第二个参数)可以是子数组的键名、对象的属性名, 也可以是一个返回给定元素数组键值的匿名函数。

The result will be an associative array, where the key is the value of id attribute

Anonymous function, passed as a $key, gives the same result.

Passing id as a third argument will group $array by id:

The result will be a multidimensional array grouped by id on the first level and not indexed on the second level:

An anonymous function can be used in the grouping array as well:

The result will be a multidimensional array grouped by id on the first level, by device on the second level and indexed by data on the third level:

建立哈希表
为了从一个多维数组或者一个对象数组中建立一个映射表(键值对),你可以使用 map方法.$from 和 $to 参数分别指定了欲构建的映射表的键名和属性名。 根据需要,你可以按照一个分组字段 $group 将映射表进行分组,例如,

多维排序
multisort 方法可用来对嵌套数组或者对象数组进行排序,可按一到多个键名排序,比如,

排序之后我们在 $data 中得到的值如下所示:

第二个参数指定排序的键名,如果是单键名的话可以是字符串,如果是多键名则是一个数组, 或者是如下例所示的一个匿名函数:

第三个参数表示增降顺序。单键排序时,它可以是 SORT_ASC 或者 SORT_DESC 之一。如果是按多个键名排序,你可以用一个数组为 各个键指定不同的顺序。
最后一个参数(译者注:第四个参数)是PHP的排序标识(sort flag),可使用的值和调用PHP sort() 函数时传递的值一样。
检测数组类型
想知道一个数组是索引数组还是联合数组很方便,这有个例子:

HTML 编码和解码值
为了将字符串数组中的特殊字符做 HTML 编解码,你可以使用下列方法:

默认情况只会对值做编码(译者注:原文中是编码,应为编解码)。通过给第二个参数传 false ,你也可以对键名做编码。 编码将默认使用应用程序的字符集,你可以通过第三个参数指定该字符集。
合并数组

对象转换为数组
你经常要将一个对象或者对象的数组转换成一个数组,常见的情形是,为了通过REST API提供数据数组(或其他使用方式), 将AR模型(活动记录模型)转换成数组。如下代码可完成这个工作:

第一个参数包含我们想要转换的数据,在本例中,我们要转换一个叫 Post 的 AR 模型。
第二个参数是每个类的转换映射表,我们在此设置了一个Post 模型的映射。 每个映射数组包含一组的映射,每个映射可以是:
- 一个要包含的照原样的字段名(和类中属性的名称一致);
- 一个由你可随意取名的键名和你想从中取值的模型列名组成的键值对;
- 一个由你可随意取名的键名和有返回值的回调函数组成的键值对;
这上面的转换结果将会是:

也可以在一个特定的类中实现Arrayable接口, 从而为其对象提供默认的转换成数组的方法。
Testing against Arrays
Often you need to check if an element is in an array or a set of elements is a subset of another. While PHP offers in_array(), this does not support subsets or \Traversable objects.
To aid these kinds of tests, yii\base\ArrayHelper provides yii\base\ArrayHelper::isIn() and yii\base\ArrayHelper::isSubset() with the same signature as in_array().

Yii的数组助手类的更多相关文章
- Yii2 数组助手类arrayHelper
数组助手类 ArrayHelper 1.什么是数组助手类 Yii 数组助手类提供了额外的静态方法,让你更高效的处理数组. a.获取值(getValue) class User { public $na ...
- php 数组助手类
ArrayHelper.php <?php /** * php 数组助手类 * Class ArrayHelper * @package app\helper */ class ArrayHel ...
- ADO.NET数据库操作助手类
SQL语句操作增删查改助手类 using System; using System.Collections.Generic; using System.Configuration; using Sys ...
- Yii的HTML助手
Html 帮助类 基础 表单 样式表和脚本 超链接 图片 列表 任何一个 web 应用程序会生成很多 HTMl 超文本标记.如果超文本标记是静态的, 那么将 PHP 和 HTML 混合在一个文件里 这 ...
- Java学习笔记七——数组工具类Arrays
数组工具类Arrays Java提供的Arrays类里包含的一些static修饰的方法可以直接操作数组.若将里面的方法用熟的话,那开发效率会大大提高.下面介绍其中的方法. List<T> ...
- 【C#】SQL数据库助手类2.0(自用)
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...
- 数组工具类 - ArrayUtil.java
数组工具类,提供数组.对象之间转换的方法. 源码如下:(点击下载 - ArrayUtil.java .commons-lang-2.6.jar) import java.lang.reflect.Ar ...
- java数组 数组工具类Arrays
一.数组 1.java有严格的数据类型限制,一个数组只能声明一个数据类型,存放同一种数据类型. 2.虽然只能存放一种数据类型,假设A , 如果数据类型B 继承A,依然能存放进入数组. 3.数组的初始化 ...
- java - day005 - 数组工具类, 数组复制,二维数组,变量,方法, 面向对象
1. java.util.Arrays 数组工具类 Arrays.toString (数组) 数组值链接字符串 Arrays.sort(数组) 基本类型: 优化的快速排序 引用类型: 优化的合 ...
随机推荐
- 使用mui框架----移动端页面在所有屏幕下自适应
写移动端怎么会不用到框架呢? 现在比较火的是mui.amaze UI 之类的,mui是现在最灵活轻便的一个框架,能够从pc到移动灵活的自适应, 只需要调用他定义的类名就能使用,非常方便,只是需要自己来 ...
- Django_验证码
问题: 登录.注册.忘记密码时候,提交用户数据时候,需要用到用户填写验证码,如何生成验证码? 那,解决方法? 第三方模块 django-simple-captcha pip install djang ...
- vs Code 运行一个本地WEB服务器
VS Code作为前端开发工具,值得推荐,用上之后,爱不释手 当我们建立一个全静态的前端项目时,如果需要将整个项目运行起来也非常简单,两步即可: 1.安装npm install -g live-ser ...
- 使用jQuery的ajax调用action的例子
直接使用ajax请求会比较繁琐,但是jQuery为我们提供了简单使用ajax的方法. 下面是一个在jQuery easyUI中,利用ajax请求,使下拉菜单关联文本框的例子.其中ajax请求就是8-1 ...
- js事件绑定函数
js中事件绑定方法大致有三种: 1.在DOM元素中绑定 <input onclick="alert('在DOM中绑定')" type="button" v ...
- MySQL权限详解
MySQL权限级别介绍 MySQL权限级别 全局性的管理权限,作用于整个MySQL实例级别 数据库级别的权限,作用于某个指定的数据库上或者所有的数据库上 数据库对象级别的权限,作用于指定的数据库对象上 ...
- 搭建内网的NTP时间服务器
NTP时间服务器 标签: linux 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 1.简介 NTP(Network Time Protocol,网络时间协议) ...
- 基于 HTML5 WebGL 的 3D SCADA 主站系统
这个例子的初衷是模拟服务器与客户端的通信,我把整个需求简化变成了今天的这个例子.3D 的模拟一般需要鹰眼来辅助的,这样找产品以及整个空间的概括会比较明确,在这个例子中我也加了,这篇文章就算是我对这次项 ...
- Numpy基础学习
Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包. 主要的功能: 1.ndarray,一个具有矢量运算和复杂广播工能的快速且节省空间的多维数组 2.用于对整组数据 ...
- HashMap实现分析
HashMap最基本的实现思想如下图所示,使用数组加链表的组合形式来完成数据的存储. Entry在数组中的位置是由key的hashcode决定的. 向一个数组长度为16,负载因子为0.75的HashM ...