菜鸟常忽略的基础 - ArrayHelper ¶
本文导航
作者:KK
发表日期:2016.9.7
速读 ¶
类名:yii\helpers\ArrayHelper(数组助手)
这个类是一个数组助手类,在官方示例的高级应用模板里的入口文件上就用到了,它是一个非常不错的类,项目里经常处理数据的时候当然少不了数组的处理,它可以为我们节省很多不必要的代码,提高开发效率,简化代码逻辑
这个类的全部方法都是静态的,下面是我经常用到的方法:
merge($a, $b)
数组合并别看它只写两个参数,其实你传无限个参数(数组)都能进行合并,和array_merge一样支持无限参数的哦
自带的array_merge只能做简单的数组合并,复杂数组结构合并还是要自己写一个的,而现在Yii就提供了这个加强版merge,不需要自己写了
用途上,我们最明显的就是能看到Yii通过这个方法实现了配置覆盖,而配置覆盖带来的环境差异配置支持为项目带来了极大的好处!
index($array, $key)
对一个数组进行索引$showNewsId = $_GET['newsId']; //假设是2 $newsList = [ [ 'id' => 1, 'title' => '新闻1', ], [ 'id' => 2, 'title' => '新闻2', ], [ 'id' => 1, 'title' => '新闻3', ], ]; $newsList = ArrayHelper::index($newsList, 'id'); echo $newsList[$showNewsId]['title']; //输出新闻2
$newsList就会变成下面这样:
[ '1' => [ 'id' => 1, 'title' => '新闻1', ], '2' => [ 'id' => 2, 'title' => '新闻2', ], '3' => [ 'id' => 1, 'title' => '新闻3', ], ];
就是每个数组元素里的id值为作索引放到外层的索引中,使得外面可以快速访问
getColumn($array, $name, $keepKeys = true)
获取指定列的所有值,以数组形式返回例如刚从数据库查出的新闻数据是这样的:
$newsList = [ [ 'id' => 1, 'category_id' => 11, 'title' => '新闻1', ], [ 'id' => 2, 'category_id' => 22, 'title' => '新闻2', ], [ 'id' => 1, 'category_id' => 33, 'title' => '新闻3', ], ];
而有时候我们需要获取所有分类ID,拼成
where category_id in(11,22,33)
这样去查一下相关的分类信息,先要得到三个分类ID怎么办?那当然是写个for循环用个数组将它们收集起来再说咯其实不用啦,这个for循环在ArrayHelper里有了:
$categoryIds = ArrayHelper::getColumn($newsList, 'category_id'); print_r($categoryIds); //[11,22,33]
$keepKeys
参数这个参数平时不怎么用,我顺便演示一下
$newsList = [ 'key1' => [ 'id' => 1, 'category_id' => 11, 'title' => '新闻1', ], 'key2' => [ 'id' => 2, 'category_id' => 22, 'title' => '新闻2', ], 'key3' => [ 'id' => 1, 'category_id' => 33, 'title' => '新闻3', ], ]; $categoryIds = ArrayHelper::getColumn($newsList, 'category_id'); print_r($categoryIds); //['key1' => 11, 'key2' => 22, 'key3' => 33] 注意,是有key的
$keepKeys就是保持key的意思,和被采集的数组一样保持了第一层key,并且默认就是保持的
如果第3个参数传false的话就不会有key了,会自动从0,1,2……这样将数组重新索引
其它实用的方法还有map
(创建索引并返回,以及有类似sql group by的功能将一个数组分组)
还有multisort
对二维数组进行指定列的排序,相信大家偶尔有这种需求吧,网上也搜了不少文章复制代码实现吧