数组值仅返回第一个字符和附加值

时间:2019-01-10 16:33:54

标签: php arrays session multidimensional-array

我正在尝试在购物车中显示比萨饼浇头。 我已经将比萨饼和浇头存储为多维数组,这部分很好,这是使用print_r()

的示例,其中一项包含2种浇头
Array ( [Special Pizza2] => Array ( [id] => 22 [name] => Special Pizza [quantity] => 1 [des] => [top1] => Array ( [id] => 1 [des] => Beef [qty] => 1 ) [top2] => Array ( [id] => 2 [des] => Chicken [qty] => 1 ) ) )

我已经在网上和SOF上进行了搜索,但仍然挠头。

正如您将在下面的主要代码中看到的那样,我在每个浇头上都使用了print_r(),因此我可以检查两个浇头的数组,对我来说它们似乎显示出了我所期望的样子;

Array ( [id] => 1 [des] => Beef [qty] => 1 )

AND

Array ( [id] => 2 [des] => Chicken [qty] => 1 )

代码:

$cart = $_SESSION["cart"];
$c = 0;
foreach($cart as $value)
    {
        if($c==0){
        echo '<div class="crtitm" style="background-color:#e6e6e6;">';
        $c = 1;
    }else{
        echo '<div class="crtitm">';
        $c = 0;
    }

    echo '<b>' .$value[name]. '</b><br>';
//11 because there are 11 toppings
    for ($x = 1; $x <= 11; $x++) {
        $top = "top".$x;
        $pizza = $value[$top];
print_r($pizza);
        foreach($pizza as $return)
        {
                echo $return[des] .'<br>';
        }
    }
    echo $value[des] .'<br>';

    echo '</div>';
}

现在由于某种原因我的代码正在返回

  
    

1
B
1

  

AND

  
    

2
C
1

  

所以我知道这将返回顶部的“ id”,然后返回“ des”的第一个字符,然后返回“ qty”。

我希望我的代码仅显示“ Des” +换行符,然后显示下一个标题,依此类推

  

供参考,总输出为;

     
    

特色比萨
    数组([id] => 1 [des] =>牛肉[qty] => 1)
    1
    B
    1
    数组([id] => 2 [des] =>鸡肉[qty] => 1)
    2
    C
    1

  
     

print_r($ cart)的输出返回此结果;

     
    

Array([Special Pizza2] => Array([id] => 22 [name] => Special Pizza [数量] => 1 [des] => [top1] => Array([id] => 1 [des] =>牛肉[qty] => 1)[top2] =>数组([id] => 2 [des] =>鸡肉[qty] => 1))

  

请告诉我我哪里出了问题,感谢所有帮助!

1 个答案:

答案 0 :(得分:2)

您不需要此循环:

    foreach($pizza as $return)
    {
            echo $return[des] .'<br>';
    }

在这里,$pizza实际上是一个浇头的浇头数组,您只需要其中的描述。但是,您要遍历每个元素,然后尝试将其作为数组来引用-并非如此。因此,只需将上面的代码替换为此:

echo $pizza['des'];

请注意,不要引用这样的引号数组索引:$pizza['des']

不要这样做:$pizza[des]