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;
});

在本例中,我们传递了一个匿名函数,它完全满足您的需要。我认为最好将这些更改应用于结果数组,而不是原始结果集。

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

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

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