Yii2 ArrayHelper::map 连接第三个参数
Yii2 ArrayHelper::map Concatenate third parameter
这是我的代码。
$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>
我不知道这是否是 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
PHP 具有 array_walk
函数,允许将函数应用于数组中的每个项目。
所以,这是您的操作方式:
$activities = ArrayHelper::map(LibActivity::find()->all(), 'id', 'activity_name');
array_walk($activities, function(&$value, $key){
$value = $key.' '.$value;
});
在本例中,我们传递了一个匿名函数,它完全满足您的需要。我认为最好将这些更改应用于结果数组,而不是原始结果集。
您还可以优化原始查询。假设 id
和 activity_name
是实际的 table 字段,您可以这样做:
LibActivity::find()->select(['id', 'activity_name'])->asArray()->all()
这样您将只会获得必要的字段,并避免在不需要的地方创建对象。
这是我的代码。
$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>
我不知道这是否是 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
PHP 具有 array_walk
函数,允许将函数应用于数组中的每个项目。
所以,这是您的操作方式:
$activities = ArrayHelper::map(LibActivity::find()->all(), 'id', 'activity_name');
array_walk($activities, function(&$value, $key){
$value = $key.' '.$value;
});
在本例中,我们传递了一个匿名函数,它完全满足您的需要。我认为最好将这些更改应用于结果数组,而不是原始结果集。
您还可以优化原始查询。假设 id
和 activity_name
是实际的 table 字段,您可以这样做:
LibActivity::find()->select(['id', 'activity_name'])->asArray()->all()
这样您将只会获得必要的字段,并避免在不需要的地方创建对象。