我有这种情况:多个选项名称和多个选项值,如何显示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 :(得分:0)
如果我理解您的代码,您可以这样做:
Roses are
<?php
foreach ($product['option'] as $option) {
echo "$option['value'], ";
}
?>
(也许更改'玫瑰'的变化,但不知道这个名字在你的代码中的位置)
答案 1 :(得分: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/>"; ?>
我的代码有点乱,没有经过测试,但我想你明白了这一点:)
答案 2 :(得分:0)
这是一个选项。
您的初始数组(这可能是从数据库中获取的。我根据您的问题猜测确切的结构,但应该接近):
/* Initial array
Array
(
[option] => Array
(
[0] => Array
(
[name] => Roses
[value] => red
)
[1] => Array
(
[name] => Violets
[value] => blue
)
[ ... ]
)
)
*/
循环遍历它并使其成为一个数组,每个值包含一组颜色。基本上将$value
分组到$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.
*/