2013-03-31 1 views
0

Я ищу решение для переключения цветов элементов, закодированных в цикле foreach. Все предметы должны иметь другой цвет, основанный на значении цвета.Многомерный массив? Переключение цветов (в массиве) на элементы, основанные на значении в одном массиве

Синий должен быть указан 2 раза, а желтый - 5 раз - в последовательности.

$colors = array 
    (
    array("blue", 2), 
    array("yellow", 5), 
    array("green",4) 
); 

foreach($colors as $color){ 
    foreach($color as $item){ 
     $colorClass = $item; 
     echo $colorClass; 
     //outputs blue8yellow12green16 

    } 
} 

Я хочу выход быть:

blue 
blue 
yellow 
yellow 
yellow 
yellow 
yellow 
green 
green 
green 
green 

Есть ли способ сделать это? Я открыт для решения этой проблемы в любом PHP или JavaScript/JQuery

+0

Посмотрите в [ 'for' цикла] (http://php.net/ manual/en/control-structures.for.php) – Boaz

ответ

2

Простое решение может быть таким:

$colors = array 
    (
    array("blue", 2), 
    array("yellow", 5), 
    array("green",4) 
); 

foreach($colors as $color){ 

    $colorClass = $item[0]; 
    $colorCount = $item[1]; 
    for($i=0; $i<$colorCount; $i++) { 
     echo $colorClass; 
    } 

} 
+0

Большое вам спасибо, это замечательно! Хотя, кажется, не работает полностью с ситуацией, я не принимал во внимание, что это должно выполняться внутри цикла foreach комментариев в wordpress. Каким-то образом, похоже, сейчас печатаются все комментарии в бесконечном цикле. Хотя, к счастью, он делает это с правильным интервалом. Мне havent удалось изменить внешний цикл комментариев до версии, не уверен, что это будет правильный путь? – user1923357

0

Вот некоторые JavaScript:

var colors = [["blue",2],["yellow",5],["green",4]]; 
var colorClass = []; 
for (var i = 0; i < colors.length; i++) { 
    for (var g = 0; g < colors[i][1]; g++) { 
     colorClass.push(colors[i][0]); 
    } 
} 
output -> ["blue", "blue", "yellow", "yellow", "yellow", "yellow", "yellow", "green", "green", "green", "green"] 

Хорошо в этом коде заключается в том, что вы можете добавить больше цветов без изменения алгоритма

+0

Как работает .push() в php? array_push ($ colorClass [$ я] [0]); не работает. – user1923357

+0

вы можете использовать $ colorClass [count ($ colorClass)] = $ i; это добавит элемент в последнюю позицию массива –

0

Если вы хотите распечатать последовательность строк, используйте string_repeat:

foreach($colors as $color){ 
    echo str_repeat($color[0] . "\n", $color[1]); 
} 

Если вы хотите, чтобы делать вещи с названием цвета, вы можете придерживаться for цикла:

foreach($colors as $color){ 

    for($i = 0; $i<$color[1]; $i++){ 

     // do stuff with $color[0] here 
     // this loop will go on for $color[1] times 

    } 

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