我正在尝试在PHP中创建一个关联数组。
我们的想法是将“商品ID”存储为数组键,并将该商品ID的总支出存储为值。
我使用以下代码从我的MYSQL中获取数据两个单独的表,一个包含项目信息,另一个包含费用列表。
// GET ITEM DATA FROM DB
$getItemData = mysql_query("SELECT * FROM items;");
// CREATE ARRAY
$orderItemsBySpend = array();
// LOOP THROUGH ITEMS AND CALCULATE SPEND IN LAST 30 DAYS
while($itemData = mysql_fetch_assoc($getItemData)){
$getItemExpenses = mysql_query("
SELECT SUM(cost)
AS productExpenses
FROM expenses
WHERE itemId = $itemData[id]
AND date BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();");
$itemExpenses = mysql_fetch_assoc($getItemExpenses);
// SET TOTAL SPEND VARIABLE
$totalProductSpend = $itemExpenses['productExpenses'];
// SET ITEM ID VARIABLE
$itemId = $itemData[id];
// ADD KEY AND VALUE TO ARRAY
$orderItemsBySpend[$itemId] = $totalProductSpend;
// PRINT ARRAY FOR TESTING PURPOSES
print_r($orderItemsBySpend);
}
不幸的是,没有像我期望的那样得到这样的东西(我希望!)
请注意,0.00值仅限于费用表中只有有限的数据。
Array (
[1] => 14.01
[2] => 0.00
[3] => 0.00
[4] => 0.00
[5] => 0.00
[6] => 20.24
[7] => 0.00
[8] => 0.00
[9] => 0.00
)
相反,我得到了这个:
Array (
[0] => 14.01
)
Array (
[0] => 14.01
[1] => 0.00
)
Array (
[0] => 14.01
[1] => 0.00
[2] => 0.00
)
Array (
[0] => 14.01
[1] => 0.00
[2] => 0.00
[3] => 0.00
)
etc.
我的问题是:为什么要创建这种奇怪的“增量模式”?为什么数组键没有被设置为项目ID?
第一个数组的键应为1(第一个项目Id),而不是0。
所有建议都表示赞赏!
谢谢,
布鲁斯。
答案 0 :(得分:3)
问题是你是在错误的地方打印你的数组。它现在是内部循环,它是以这种方式打印。只需在while()
循环内删除它并将其放在循环外。如下所示: -
while(){
}
print_r();
注意: - 一个有用的建议是切换到mysqli_*
或PDO
是最好的,因为mysql_*
已被正式弃用。
答案 1 :(得分:0)
$itemId = $itemData[id];
就是问题所在。
变量$itemData[id]
在该循环的上下文中不存在,因此它导致空值,然后
$orderItemsBySpend[$itemId] = $totalProductSpend;
有效地成为
$orderItemsBySpend[] = $totalProductSpend;
而是尝试:
$itemId = $itemData['id'];