Yii2 ArrayHelper :: map连接第三个参数

时间:2015-10-09 03:33:56

标签: yii2 helper

这是我的代码。

$activities = ArrayHelper::map(LibActivity ::find()->all(), 'id', 'activity_name');

它生成以下内容。

    <select id="tblncddpvlcccbis-activity_id" class="form-control" name="TblNcddpVlccCbis[activity_id]">
    <option value="">---Select Type of Activity---</option>
    <option value="1">Social Mobilization</option>
    <option value="2">Project Identification/Selection</option>
    <option value="3">Project Approval</option>
    </select>

我想要的是连接第三个参数,以便选项可以是id-activity_name,如下所示:

$activities = ArrayHelper::map(LibActivity ::find()->all(), 'id', 'id'.'-'.'activity_name');

<select id="tblncddpvlcccbis-activity_id" class="form-control" name="TblNcddpVlccCbis[activity_id]">
<option value="">---Select Type of Activity---</option>
<option value="1">1-Social Mobilization</option>
<option value="2">2-Project Identification/Selection</option>
<option value="3">3-Project Approval</option>
</select>

2 个答案:

答案 0 :(得分:2)

我不知道这是否是YII中的标准方式,但您可以这样尝试:

$libs = LibActivity ::find()->all();
foreach($libs as &$lib){
    $lib->activity_name = $lib->id.'-'.$lib->activity_name;
}

$activities = ArrayHelper::map($libs, 'id', 'activity_name');
// Todo With activities

答案 1 :(得分:1)

PHP具有array_walk功能,允许将函数应用于数组中的每个项目。

所以,这是你如何做到的:

$activities = ArrayHelper::map(LibActivity::find()->all(), 'id', 'activity_name');
array_walk($activities, function(&$value, $key){
    $value = $key.' '.$value;
});

在这种情况下,我们传递一个完全符合您需要的匿名函数。我认为最好将这些更改应用于结果数组,而不是原始结果集。

您还可以优化原始查询。假设idactivity_name是实际的表字段,您可以这样做:

LibActivity::find()->select(['id', 'activity_name'])->asArray()->all()

这样,您只需获取必要的字段,并避免在不需要的地方创建对象。