我試圖列印出與客戶串列匹配的訂單資訊,具體取決于訂單上的客戶 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');
uj5u.com熱心網友回復:
你檢查過為什么會發生這種情況嗎?一個單一的ID不能使用多個時間在同一陣列中,因此,如果決議多個行具有相同的ID,并將其寫入到陣列使用相同的ID,要覆寫現有的訂單。只能訪問具有該 ID 的最后一個訂單。通過比較決議的訂單陣列和包含訂單的檔案,這應該很容易看到。
這就是為什么您通常使用唯一的訂單 ID,并將用戶 ID 存盤在該訂單中
uj5u.com熱心網友回復:
我認為你的問題在readOrders. 你似乎每次都在用$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>';
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/358786.html
下一篇:IIS上未實作HttpTRACE
