[Yii2小心肝儿]ArrayHelper之map详解(你不太用的第三个参数) [ 技术分享 ]
ArrayHelper::map( $array, $from, $to, $group = null )
map我想大家都使用过,出境频率非常高。
比如下面的场景,有一个博客分类表category.
id | name |
---|---|
1 | 张三 |
2 | 李四 |
我们现在想把这个分类表放到下拉框里,id作为key,name作为值。 于是我们在视图里写了这样的代码
<?= \yii\helpers\Html::dropDownList('cat_id',null,ArrayHelper::map(Category::find()->all(),'id','name'));?>
这样就可以了,在浏览器上你会看到
<select name="name">
<option value="1">张三</option>
<option value="2">李四</option>
</select>
诸如此类的:我们可以通过map方法将一个结果集或多维数组每项的2个字段抽取出来,一个作为key、一个作为value,重新组成一个数组作为结果返回。
到这里map已经很方便,好吧,我们再来说说第三个函数$group,这是一个可选参数,它能实现类似于sql的group by分组功能。
看例子~~~~,这是一个小组的成员表person。
id | realname | sex |
---|---|---|
1 | 张三 | boy |
2 | 李四 | boy |
3 | 王五 | boy |
4 | 小三 | gril |
我们想做这样一件事情,首先按照性别分组,每组里分别是一个人的姓名信息,通过map能轻易实现。
<?= ArrayHelper::map($persons,'id','realname','sex');
于是你看到了这样的结果
[
'boy'=>[1=>'张三',2=>'李四',3=>'小五'],
'girl'=>[4=>'小三'],
]
这就是map函数。
北哥会把最新文章和视频信息发朋友圈,可以扫码加我微信。
共 7 条回复
-
不用分组功能,我感觉还是直接拼接好点
$status = PostStatus::find()->select(['name','id']) ->indexBy('id') ->asArray() ->column();
starbaby01 , abei1982 觉得很赞
abei1982 河南洛阳
注册时间:2015-05-16
最后登录:2020-04-14
在线时长:128小时48分
最后登录:2020-04-14
在线时长:128小时48分
- 粉丝307
- 金钱4935
- 威望50
- 积分6715