2013-06-09 3 views
0

У меня есть эта ситуация: множественное имя параметра и несколько значений параметра, как отображать опцию foreach все значения?Как использовать функцию PHP foreach

Мой код делает это:

Roses (option name) are red (option value) 
Roses are blue 
Roses are white 

Как я хочу его показать, как это:

Roses are red, blue, white 

Вот мой текущий код:

<?php foreach ($product['option'] as $option) { ?> 
      - <small><?php echo $option['name']; ?> are <?php echo $option['value']; ?></small><br /> 
<?php } ?> 
+0

является '$ вариант [ 'значение'] 'массив цвета? – invisal

+1

Можете ли вы добавить небольшой пример массива? – Perry

+0

Вы ищете "for (;;;)" not "foreach();" – Kyslik

ответ

0

Если я понимаю ваш код, вы можете сделать:

Roses are 

<?php 
    foreach ($product['option'] as $option) { 
     echo "$option['value'], "; 
    } 
?> 

(Может быть, изменить изменение «Roses», но не знает, где это имя было бы в вас коде)

0

Просто хранить $option['name'] и испытание, если это то же самое, чем предыдущая итерация

<?php 
$previous = null; 
foreach ($product['option'] as $option) { 
     if ($option['name'] == $previous) { 
      echo ", {$option['value']}"; 
     } else { 
      if ($previous) echo "</small><br/>"; 
     ?> 
     - <small><?php echo $option['name']; ?> are 
     <?php echo $option['value']; 
     } 
     $previous = $option['name']; 
} 
echo "</small><br/>"; ?> 

Мой код немного грязный и не тестировался, но, я думаю, вы поняли идею :)

0

Вот вариант.

Ваш первоначальный массив (это, вероятно, захватил из базы данных я вроде угадать точную структуру, основанную на ваш вопрос, но должно быть близко.):

/* Initial array 
Array 
(
    [option] => Array 
     (
      [0] => Array 
       (
        [name] => Roses 
        [value] => red 
       ) 

      [1] => Array 
       (
        [name] => Violets 
        [value] => blue 
       ) 
      [ ... ] 
     ) 
) 
*/ 

Петля через него и превратить его в массив с каждым значением, содержащим массив цветов. В основном группировка $value s на их $name. Это очень удобно и потому, что неважно, не забыли ли ваши записи в базе данных.

// Loop all $product['option'] 
foreach ($product['option'] as $option) { 

    // If we don't have an array made for this $name, make one 
    if (!is_array($products[ $option['name'] ])) 
     $products[ $option['name'] ] = array(); 

    // Add the $value to the $name's array 
    $products[ $option['name'] ][] = $option['value']; 
} 

/* $products = 
Array 
(
    [Roses] => Array 
     (
      [0] => red 
      [1] => blue 
      [2] => white 
     ) 

    [Violets] => Array 
     (
      [0] => blue 
      [1] => white 
     ) 

) 
*/ 

Далее это всего лишь вопрос структуры предложения, объединяя все это вместе. Поскольку у вас есть удобный массив, вы также можете быстро делать множество других форм вывода - это просто вопрос вашего предложения.

// Loop the new array of name=>array(vals) 
foreach($products as $name => $value){ 

    // Counter variables and initial values for output 
    $cnt = count($value); 
    $cur = 2; 
    $out = $name . " are "; 

    // Loop all $values for the current $name 
    foreach($value as $v){ 

     // Make the output 
     $sep = ($cur > $cnt ? "." 
      : ($cnt == 2 || $cur == $cnt ? " and " : ", ")); 
     $out .= $v . $sep; 
     $cur++; 
    } 
    // Save the output to the name array 
    $products[$name]["out"] = $out; 
} 

Этот выход может быть использован в любом месте Теперь вы можете получить доступ к $products массив

echo $products["Roses"]["out"]; 
echo $products["Violets"]["out"]; 

/* 
Output: 
Roses are red, blue and white. 
Violets are blue and white. 
*/ 

http://codepad.org/sL8YhzCq

Смежные вопросы