簡體   English   中英

具有非唯一鍵的PHP關聯數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM