首页 > 解决方案 > PHP - 数组恶作剧

问题描述

目前,下面的代码只返回字符串的第一个字母$pizzas[]

$total = 0;
  $pizzas = array('kebabpizza' => 80, 'calzone' => 60, 'vesuvio' => 60);
  foreach ($pizzas as $pizza => $price) {
    for($i = 0; $i < count($pizza); $i ++) {
      echo $pizza[$i] . " - $price<br>";
      break;
    }
    $total +=$price;
  }
  echo "Your order is gonna cost you $total kr<hr>";

输出:

k - 80
c - 60
v - 60
Your order is gonna cost you 200 kr

标签: php

解决方案


当您执行foreach循环时,您正在迭代您的数组。当您说as $pizza => $price时,该变量$pizza被分配了您正在查看的当前数组项的键$price并被分配了值。所以在循环的第一次迭代中$pizzaiskebabpizza$priceis 80

接下来,您正在对字符串(或当时数组的键)进行for循环。kebabpizza当您尝试在循环$pizza[$i]的第一次迭代中访问时,for您会收到k. kebabpizza然后你就echo出去了k,然后是披萨的价格。

之后你有一个break语句将终止内for循环,外foreach循环将继续。这就是为什么你只看到第一个字母。

假设您要输出披萨的名称和价格,那么您根本不需要内部for循环:

$total = 0;
$pizzas = array('kebabpizza' => 80, 'calzone' => 60, 'vesuvio' => 60);
foreach ($pizzas as $pizza => $price) {
    echo "$pizza - $price<br>";

    $total +=$price;
}

echo "Your order is gonna cost you $total kr<hr>";

推荐阅读