[英]Why is my conditional statement not executing multiple times in a foreach loop? PHP
我试图打印出与客户列表匹配的订单信息,具体取决于订单上的客户 ID 是否与客户的客户 ID 匹配。 客户和订单都存储在数组中,到目前为止,我在执行订单表和打印信息方面没有问题。 我遇到的问题是只有一个订单正在为客户打印,而有些客户有多个订单应该打印。 我使用 foreach 循环遍历匹配订单 ID 的订单到请求的客户 ID,它来自查询字符串。 当我知道至少有 1 个正在打印时,我不知道为什么我的 if 语句没有为多个订单打印。
这是我的客户表的代码,当查询字符串返回客户 ID 时执行。 底部的 foreach 循环是我希望打印所有匹配订单的地方,但当我希望在某些情况下有多个订单时,它只给我一个订单。 如果需要其他信息,我可以提供。 谢谢
<?php
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
if (isset($_GET['customer'])) {
$requestedCustomer = $customers[$_GET['customer']];
$orders = readOrders('orders.txt');
// <!-- orders panel -->
echo '<br><br><br>';
echo '<div class="panel panel-danger spaceabove">';
echo '<div class="panel-heading">';
echo '<h4>Orders for ' . $requestedCustomer['name'] . '</h4>';
echo '</div>';
echo '<table class="table">';
echo '<tr>';
echo '<th>ISBN</th>';
echo '<th>Title</th>';
echo '<th>Category</th>';
echo '</tr>';
foreach ($orders as $order) {
if ($requestedCustomer['id'] == $order['id']) {
echo '<tr>';
echo '<td>' . $order['isbn'] . '</td>';
echo '<td>' . $order['title'] . '</td>';
echo '<td>' . $order['category'] . '</td>';
echo '</tr>';
}
}
}
echo '</table>';
// foreach ($orders as $order) {
// if ($order['id'] == $requestedCustomer['id']) {
// }
}
?>
您是否检查过为什么会发生这种情况? 一个单一的ID不能使用多个时间在同一阵列中,因此,如果解析多个行具有相同的ID,并将其写入到使用相同的ID,要覆盖现有的订单阵列。 只能访问具有该 ID 的最后一个订单。 通过比较解析的订单数组和包含订单的文件,这应该很容易看到。
这就是为什么您通常使用唯一的订单 ID,并将用户 ID 存储在该订单中
我认为您的问题出在readOrders
。 你似乎每次都用$orders[$order['id']] = $order;
来破坏你的数组$orders[$order['id']] = $order;
相反,您想要$orders[$order['id']][] = $order;
function readOrders($filename)
{
$arr = file($filename) or die('ERROR: Cannot find file');
// Create our primary order array
$orders = [];
$delimiter = ',';
// reading in customers from file and storing in array of customers
foreach ($arr as $line) {
$splitcontents = explode($delimiter, $line);
$order = array();
$order['id'] = $splitcontents[1];
$order['isbn'] = $splitcontents[2];
$order['title'] = utf8_encode($splitcontents[3]);
$order['category'] = utf8_encode($splitcontents[4]);
// Append the order to the array,
$orders[$order['id']][] = $order;
}
return $orders;
}
然后,在您的打印循环中,您不会遍历$orders
,而是使用由客户 ID 索引的主订单数组并获取这些特定订单。
// Get the orders for this specific customer, if they exist
$customerOrders = $orders[$requestedCustomer['id']] ?? [];
foreach ($customerOrders as $order) {
echo '<tr>';
echo '<td>' . $order['isbn'] . '</td>';
echo '<td>' . $order['title'] . '</td>';
echo '<td>' . $order['category'] . '</td>';
echo '</tr>';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.