我如何使用PHP foreach函数

时间:2013-06-09 18:25:39

标签: php foreach

我有这种情况:多个选项名称和多个选项值,如何显示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 } ?>

3 个答案:

答案 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.
*/

http://codepad.org/sL8YhzCq