php - 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
解决方案
当您执行foreach
循环时,您正在迭代您的数组。当您说as $pizza => $price
时,该变量$pizza
被分配了您正在查看的当前数组项的键$price
并被分配了值。所以在循环的第一次迭代中$pizza
iskebabpizza
和$price
is 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>";
推荐阅读
- javascript - 如何正确生成抛物线
- reactjs - 将 Promise 传递给 reducer 并在那里解决它是一件坏事吗?
- java - Android Studio 中没有立即设置可见性
- log4net - log4net 是否有接受级别作为参数的消息写入方法?
- python - 从 html 中删除不匹配的结束标记
- arrays - MongoDB中数组中的字符串字段值长度
- influxdb - Telegraf 文件计数值未显示在 influxdb 中
- javascript - 如何创建默认在新窗口中打开的浏览器书签?
- ios - 在 Xcode 10 中添加自定义 UITableViewController 标头
- javascript - Wordpress:将所有帖子的子子类别设为“主要”