这是我的代码。
$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>
答案 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;
});
在这种情况下,我们传递一个完全符合您需要的匿名函数。我认为最好将这些更改应用于结果数组,而不是原始结果集。
您还可以优化原始查询。假设id
和activity_name
是实际的表字段,您可以这样做:
LibActivity::find()->select(['id', 'activity_name'])->asArray()->all()
这样,您只需获取必要的字段,并避免在不需要的地方创建对象。