YII2平面阵列

时间:2014-06-25 09:51:20

标签: php arrays drop-down-menu yii2

我有一个包含产品列表的下拉列表。

<?= $form->field($product, 'dot_prod_id')->dropDownList($items = Functions::getProducts($company->dot_com_id),['prompt' => 'Select'])?>

函数getProducts():

public static function getProducts($company){

    $i=0;
    $products = Product::find()->where(['dot_prod_com' => $company])->asArray()->all();     
    $out=[];
    //$out= array_values($products);

    for($i=0; $i<sizeof($products); $i++){

        $out[$i] = ['id'=>$products[$i]['dot_prod_id'], 'name'=>$products[$i]['dot_name'] ." ". $products[$i]['dot_prod_dots'] . " Dots needed"];
    }

    return $out;
}

它返回这个html:

<option value="">Select</option>
<optgroup label="0">
<option value="id">1</option>
<option value="name">Sumo de Limão 10 Dots needed</option>
</optgroup>
<optgroup label="1">
<option value="id">2</option>
<option value="name">Sumo de Laranja 10 Dots needed</option>
</optgroup>
<optgroup label="2">
<option value="id">3</option>
<option value="name">Pilhas AA 5 Dots needed</option>
</optgroup>
<optgroup label="3">
<option value="id">4</option>
<option value="name">Pilhas AAA 5 Dots needed</option>
</optgroup>
</select>

我只想要一个简单的选择:

<select id="product-dot_prod_id" class="form-control" name="Product[dot_prod_id]" onChange="javascript:getProdID()">
<option value="">Select</option>
<option value="1">Sumo de Limão</option>
<option value="2">Sumo de Laranja</option>
<option value="3">Pilhas AA</option>
<option value="4">Pilhas AAA</option>
</select>

我知道问题出在getProducts()中,但我不知道如何将数组放在路上。我已经尝试使用ArrayHelper(),但我想在一个中连接两个字段,就像[&#39; id&#39; =&gt;&#39; dot_prod_id&#39;,&#39; name&#39; =&gt; ;&#39; dot_name&#39;&#34; &#34 ;. &#39; dot_prod_dots&#39;&#34; .....&#34;]

1 个答案:

答案 0 :(得分:6)

下拉列表中的项目应为Flat array('id'=&gt;'label')..所以:

$out[$products[$i]['dot_prod_id']] = $products[$i]['dot_name'] ." ". $products[$i]['dot_prod_dots'] . " Dots needed"];

在你的情况下,你得到像:[0 =&gt; ['id'=&gt; 123,'name'=&gt;'asd']]

以更优雅的方式使用ArrayHelper :: map和匿名函数作为第三个参数:

public static function getProducts($company){

  return ArrayHelper::map(
    Product::find()->where(['dot_prod_com' => $company])->asArray()->all(), 
    'dot_prod_id', 
    function($element){
      return $element['dot_name'] ." ". $element['dot_prod_dots'] . " Dots needed";
    });

}