2015-02-13 3 views
0

У меня есть массив и вы хотите преобразовать его в поле выбора. Вы можете найти мое решение ниже. Но у меня проблема с параметром вывода html с параметрами lats. Где моя проблема и как я могу решить эту проблему?php | Преобразование массива в поле выбора

Мой код:

if (isset($product->options) && count($product->options)) { 

      $option_name = ''; 
      foreach ($product->options as $option) {   
       if (trim($option_name) != trim($option->name)) { 
        echo '<select class="width-100" name="product[option][name]['.$option->name.']">'; 
       } 
       echo '<option value="'.$option->value.'">'.$option->value.'</option>'; 

       if (trim($option_name) != trim($option->name)) { 
        echo '</select>'; 
       } 

       $option_name = $option->name;  
      } 
     } 

Мой выход выглядит следующим образом:

<select class="width-100" name="product[option][name][Color]"> 
    <option value="Black">Black</option> 
</select> 
<select class="width-100" name="product[option][name][Size]"> 
    <option value="XL">XL</option> 
</select> 
<option value="X">X</option> 

Мой массив:

[options] => Array 
     (
      [0] => stdClass Object 
       (
        [name] => Color 
        [value] => Black 
        [price] => +50 
        [order] => 
       ) 

      [1] => stdClass Object 
       (
        [name] => Size 
        [value] => XL 
        [price] => +10 
        [order] => 
       ) 

      [2] => stdClass Object 
       (
        [name] => Size 
        [value] => X 
        [price] => +5 
        [order] => 
       ) 

     ) 
+0

какие проблемы у вас есть? – Loko

+0

Почему вы не используете для цикла вместо foreach? – mgamon

ответ

1

Попробуйте это:

if (isset($product->options) && count($product->options)) { 
    $arr = []; 

    foreach ($product->options as $option) { 
     $arr[$option->name][] = '<option value="'.$option->value.'">'.$option->value.'</option>'; 
    } 

    foreach ($arr as $k=>$v) { 
     echo '<select class="width-100" name="product[option][name]['.$k.']">'; 
     echo join("\n", $v); 
     echo '</select>'; 
    } 
} 
+0

Спасибо! Работает хорошо. – user889349

+0

Добро пожаловать. –

0

Пожалуйста, попробуйте эту

if (isset($product->options) && count($product->options)) { 

     $option_name = ''; 
     $i = 0; 
     foreach ($product->options as $option) {   
      if (trim($option_name) != trim($option->name)) { 
       echo '<select class="width-100" name="'.$option->name.'">'; 
      } 
      echo '<option value="'.$option->value.'">'.$option->value.'</option>'; 

      if (trim($option_name) != trim($option->name)) { 
       echo '</select>'; 
      } 

      $option_name = $option->name;  
      $i++; 
     } 
    } 
Смежные вопросы