Вот вариант.
Ваш первоначальный массив (это, вероятно, захватил из базы данных я вроде угадать точную структуру, основанную на ваш вопрос, но должно быть близко.):
/* 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
является '$ вариант [ 'значение'] 'массив цвета? – invisal
Можете ли вы добавить небольшой пример массива? – Perry
Вы ищете "for (;;;)" not "foreach();" – Kyslik