[英]PHP associative array with non-unique keys
苦苦掙扎的關聯數組的概念,該數組將用戶ID映射到部件ID並重新訂購部件的數量。
我們有一堆零件需要重新訂購,但是我必須跟蹤哪個用戶需要為他們重新購買哪些零件。 UserID的列表來自一個表,然后stocked_used來自另一個表。
假設這樣的列表:
范例一:
UserID PartID Qty_Used
1 3 2
1 4 7
2 1 4
2 4 3
3 3 5
創建具有上述信息的數組后,我必須為零件創建一個重新訂購表格(表)。 因此,忽略用戶ID,將其按partID分組,然后對總數量(每部分)求和。 重新排序表應如下所示:
示例二:
PartID Qty_to_Reorder
1 4
3 7
4 10
我知道我將因無法顯示代碼而大受淘汰,但我無法解決這個看似簡單的問題。 (這是給我的辦公室,而不是學校的項目)。
我如何:
(1)構建第一個數組(創建它的循環是什么樣的?),然后
(2)按照上面的第二個示例循環遍歷該數組以匯總/分組partIDs => Qty
要重新排序報告的partIDs => Qty
?
對於第一個循環,我在想這樣的事情:
Loop through UserIDs {
Loop through PartIDs {
$arrReorder[UserID][PartID] = Qty_Used;
}
}
那是對的嗎? 我如何遍歷$ arrReorder以總結用於每個partID的數量,並獲得重新訂購報告(示例2)?
從mytable WHERE PartID = 3中選擇SELECT SUM(Qty_Used)AS總計
PS:使用PHP
<?php
$data = array();
$data[] = array("UserID" => 1, "PartID" => 3, "Qty_Used" => 2);
$data[] = array("UserID" => 1, "PartID" => 4, "Qty_Used" => 7);
$data[] = array("UserID" => 2, "PartID" => 1, "Qty_Used" => 4);
$data[] = array("UserID" => 2, "PartID" => 4, "Qty_Used" => 3);
$data[] = array("UserID" => 3, "PartID" => 3, "Qty_Used" => 5);
$PartID = 3;
$sum = 0;
foreach ($data as $arr) {
if ($arr['PartID'] == $PartID)
$sum += $arr['Qty_Used'];
}
echo $PartID."\t".$sum."\r\n";
?>
數組具有鍵和值,其中值可以是另一個數組。 確定什么是關鍵值。
我假設您有用戶在使用零件,而您必須從供應商處重新訂購零件。 如果用戶是客戶,並且用戶具有自動重新訂購策略,則否。
什么觸發重新訂購? 如果重新訂購數量為10,並且用戶使用1,則庫存中應該有9個。
創建partsUsed數組元素,這有點棘手:
$partsUsed[$part][] = array($qtyUsed,$user);
使用方括號[]
的原因是允許在所使用的零件中使用重復的零件號,並且仍將關鍵零件作為關鍵。
該值是一個數組,用於鍵入用戶和部件之間的關聯。
您最終得到的是順序編號的輔助鍵,其中的值只是一擲千金,但允許重復的部件號。
$partsUsed[3][] = array(2,1);
$partsUsed[4][] = array(7,1);
$partsUsed[1][] = array(4,2);
$partsUsed[4][] = array(3,2);
$partsUsed[3][] = array(5,5);
ksort($partsUsed); // sorts key on part number
var_export($partsUsed);
結果數組(var_export):數組(1 =>數組(0 =>數組(0 => 4,1 => 2,),),3 =>數組(0 =>數組(0 => 2,1 => 1,),1 =>數組(0 => 5,1 => 5,),),4 =>數組(0 =>數組(0 => 7,1 => 1,),1 =>數組( 0 => 3,1 => 2,),),)
請注意,第3部分和第4部分有兩個數組。
$reorder[1] = 4 ;
$reorder[2] = 7 ;
$reorder[4] = 10 ;
var_export($reorder);
結果數組:
array (
1 => 4,
2 => 7,
4 => 10,
)
現在不知道如何確定重新排序的內容和數量。
我將展示如何獲取值:
foreach($partsUsed as $part => $value){
foreach($value as $k => $v){
echo "Part $part: Qty:$v[0] User:$v[1]\n";
$qtyUsed[$part] += $v[1];
}
}
var_export($qtyUsed);
輸出:
Part 1: Qty:4 User:2
Part 3: Qty:2 User:1
Part 3: Qty:5 User:3
Part 4: Qty:7 User:1
Part 4: Qty:3 User:2
$ qty已使用
array (
1 => 2,
3 => 4,
4 => 3,
)
foreach ($qtyUsed as $part => $qty){
$order[$part] = $reorder[$part];
}
var_export($order);
結果$ order:
array (
1 => 4,
3 => 7,
4 => 10,
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.