具有非唯一键的PHP关联数组

时间:2015-04-07 23:05:07

标签: php mysql arrays

使用关联数组的概念进行挣扎,该关联数组将userID映射到partID并重新订购该部件的数量。

我们需要重新订购一系列零件,但我必须跟踪哪个用户需要为他们重新购买哪些零件。 UserID列表来自一个表,然后inventory_used来自另一个表。

假设一个这样的列表:

示例一:

UserID   PartID   Qty_Used
    1       3       2
    1       4       7
    2       1       4
    2       4       3
    3       3       5

使用上述信息创建数组后,我必须为部件创建重新订购表单(表格)。因此,忽略userID,按partID对它们进行分组,并总计总数量(每个部分)。重新订购表应如下所示:

示例二:

PartID      Qty_to_Reorder
    1        4
    3        7
    4       10

我知道我会因为没有显示代码而采取大量的downvotes,但我不能完全围绕这个看似简单的问题。 (这是我的办公室,而不是学校项目。)

我如何:

(1)构造第一个数组(创建它的循环是什么样的?),然后是

(2)按照上面第二个例子,循环遍历该数组以汇总/分组partIDs => Qty以获得重新订购报告?


对于第一个循环,我正在考虑这样的事情:

Loop through UserIDs {
    Loop through PartIDs {
        $arrReorder[UserID][PartID] = Qty_Used;
    }
}

这是对的吗?我如何循环$ arrReorder来总结每个partID使用的数量,并获得重新订购报告(例2)?

2 个答案:

答案 0 :(得分:0)

SELECT SUM(Qty_Used)AS total FROM mytable WHERE PartID = 3

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";
?>

答案 1 :(得分:0)

数组有一个键和值,其中值可以是另一个数组。确定关键值是什么。

我假设您有用户消耗零件,您必须从供应商处重新订购零件。否则用户是客户并且用户具有自动重新订购策略。

什么触发重新排序?如果重新订购数量为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 =&gt;       阵列(         0 =&gt;         阵列(           0 =&gt; 4,           1 =&gt; 2,         )       )       3 =&gt;       阵列(         0 =&gt;         阵列(           0 =&gt; 2,           1 =&gt; 1,         )         1 =&gt;         阵列(           0 =&gt; 5,           1 =&gt; 5,         )       )       4 =&gt;       阵列(         0 =&gt;         阵列(           0 =&gt; 7,           1 =&gt; 1,         )         1 =&gt;         阵列(           0 =&gt; 3,           1 =&gt; 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

$ qtyUsed

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,
)