标签:null 构建 second isset device test 应用程序 合并 dimens
用原生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 编解码,你可以使用下列方法:
默认情况只会对值做编码(译者注:原文中是编码,应为编解码)。通过给第二个参数传 false
,你也可以对键名做编码。 编码将默认使用应用程序的字符集,你可以通过第三个参数指定该字符集。
你经常要将一个对象或者对象的数组转换成一个数组,常见的情形是,为了通过REST API提供数据数组(或其他使用方式), 将AR模型(活动记录模型)转换成数组。如下代码可完成这个工作:
第一个参数包含我们想要转换的数据,在本例中,我们要转换一个叫 Post
的 AR 模型。
第二个参数是每个类的转换映射表,我们在此设置了一个Post
模型的映射。 每个映射数组包含一组的映射,每个映射可以是:
这上面的转换结果将会是:
也可以在一个特定的类中实现Arrayable接口, 从而为其对象提供默认的转换成数组的方法。
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().
标签:null 构建 second isset device test 应用程序 合并 dimens
原文地址:http://www.cnblogs.com/peteremperor/p/6472449.html