【问题标题】:Array value only returning first character and extra values数组值只返回第一个字符和额外的值
【发布时间】:2019-01-11 00:39:45
【问题描述】:

我正在尝试在购物车中展示披萨配料。 我已经将比萨饼和配料存储为多维数组,这部分很好,这是一个使用 print_r() 的 1 个项目和 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(),因此我可以检查数组中的 2 个浇头,并且在我看来,它们似乎按我的预期显示;

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

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

2
C
1

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

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

供参考,总输出为;

特色披萨
数组 ( [id] => 1 [des] => 牛肉 [qty] => 1 )
1

1
数组 ( [id] => 2 [des] => 鸡 [qty] => 1 )
2
C
1

而 print_r($cart) 的输出返回这个;

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

请告诉我哪里出错了,感谢大家的帮助!

【问题讨论】:

  • 使用引号 - $value['name'],而不是 $value[name] - 对所有其他数组元素引用执行相同操作,例如$return['des'], $value['des']

标签: php arrays session multidimensional-array


【解决方案1】:

你不需要这个循环:

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

这里,$pizza实际上是一个topping的topping数组,你只需要它的描述。但是,您正在遍历每个元素,然后尝试将其作为数组来尊重 - 但事实并非如此。所以只需将上面的代码替换为:

echo $pizza['des'];

注意,像这样引用数组索引:$pizza['des']

不要这样做:$pizza[des]

【讨论】:

  • 太好了,你一针见血!我已将其替换为以下内容,删除了额外的循环并添加了一个` if qty > 0`,这样它就不会无缘无故地给我换行符并且完美显示,谢谢! code $qty = $pizza['qty']; if($qty&gt;0){ echo $pizza['dec'] .'&lt;br&gt;'; } 谢谢!!
  • 不需要分配额外的变量,你可以这样做:if ($pizza['qty'] &gt; 0) { echo $pizza['dec'] .'&lt;br&gt;'; }
猜你喜欢
  • 2021-08-22
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
相关资源
最近更新 更多