PHP-数组恶作剧

时间:2018-10-02 21:53:33

标签: 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

5 个答案:

答案 0 :(得分:3)

当您执行foreach循环时,您正在遍历数组。当您说as $pizza => $price时,变量$pizza被分配了您正在查看的当前数组项的键,而$price被分配了值。因此,在循环的第一次迭代中,$pizzakebabpizza,而$price80

接下来,您正在对字符串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>";

答案 1 :(得分:0)

您为什么要遍历$pizza

$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>";

答案 2 :(得分:0)

因为您正在查找$ pizza变量,它是一个字符串(所以是一个字符数组),而不是仅在foreach循环中使用它

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

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

清晰的示例

import { Slides } from 'ionic-angular';

答案 3 :(得分:0)

那是因为您试图在第二个循环中遍历字符串。

您的第一个循环将遍历数组中的每个元素:

foreach ($pizzas as $pizza => $price) { ...

将遍历这些项目

- kebabpizza => 80
- calzone => 60
- vesuvio => 60

在内部(第二个)循环(for($i = 0; $i < count($pizza); $i ++))中,您实际上将尝试遍历键元素中的每个字符

k[0]
e[1]
b[2]
a[3]
...

如果您完全跳过内循环并打印$pizza,那么您应该没事

foreach ($pizzas as $pizza => $price) {
    echo $pizza . " - $price<br>";
}
$total +=$price;

答案 4 :(得分:0)

字符串上的

count()始终返回1。您正在寻找的是strlen(),但这是完全不必要的。只是echo $pizza;

实际上,如果要工作,您会得到类似以下内容的信息:

k - 80
e - 80
...