Php yii2:一行中包含多个值的下拉列表

Php yii2:一行中包含多个值的下拉列表,php,yii2,Php,Yii2,对于我的下拉列表,我使用以下代码 <?= $form->field($medicinerequest, '[' . $id . ']' . 'medicine_name') ->DropDownList(ArrayHelper::map(\app\models\Medicine::find() ->asArray()->all(), 'id', 'medicine_name','medicine_id' ), [ 'prompt' => 'Please Sel

对于我的下拉列表,我使用以下代码

<?= $form->field($medicinerequest, '[' . $id . ']' . 'medicine_name')
->DropDownList(ArrayHelper::map(\app\models\Medicine::find()
->asArray()->all(), 'id', 'medicine_name','medicine_id' ),
[ 'prompt' => 'Please Select' ])?> 

我得到了如图所示的下拉列表。但我希望它在一行中由连字符(-)连接。我该怎么做


好的,我找到了解决办法。如果有更好的解决办法,我将表示欢迎

我在Medicine.php模型中创建了一个函数

public function getMedicineName(){
        return $this->medicine_name .'-'.$this->medicine_id;
    }
然后在arrayhelper中将medicineName替换为medicineName,现在我得到了我想要的。

用于从、
$到
$组
获取值
ArrayHelper::getValue()
允许传递闭包

匿名函数签名应该是:
函数($array,$defaultValue)

因此,您可以将
$to
设置为

ArrayHelper::map(
    \app\models\Medicine::find()->asArray()->all(),
    'id',
    function($model) {
        return $model['medicine_name'].'-'.$model['medicine_id'];
    }
)

匿名函数可以是

function ($element) {
   return $element['medicine_name'] . '-'. $element['medicine_id'];
}

你可以查一下

您可以在kartik Depdrop小部件中设置
$var
,就像我们在这里使用kartik Depdrop小部件的下拉小部件中的场景一样

<?php

        $var = ArrayHelper::map(Modelname::find()->where(['id' => $model->customer_id])->all(), 'id',
            function ($model) {
                return $model['id'] .' - '. $model['name'];
            });
        echo $form->field($model, 'id')->widget(DepDrop::classname(), [
            'data' => $var,
            'pluginOptions' => [
                'depends' => [''],
                'url' => Url::to(['#'])
            ]
        ]) ?>

或者,您可以从控制器esp中为从属下拉列表填充它;返回key=>value对,其中包含从模型字段连接的值

echo "<option value='".$model->id."'>"
.$model->field1.' '
.$modle->field2.' '.$model->field3."</option>";
echo“”
.$model->field1.'
.$modle->field2.“.$model->field3.”;

不过我会坚持我的解决方案,因为它可以在多个地方使用,只需一次声明。但是你已经很好地解释了正确的方法,我接受你的回答。$model应该是一个数组,而不是一个对象。所以返回$model['medicine_name'.-.$model['medicine_id']@迪戈贝托,谢谢你。为了将来的参考,你可以自己编辑答案来改进它。