PHP

时间:2015-07-24 22:58:50

标签: php mysql arrays

我正在尝试在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。

所有建议都表示赞赏!

谢谢,

布鲁斯。

2 个答案:

答案 0 :(得分:3)

问题是你是在错误的地方打印你的数组。它现在是内部循环,它是以这种方式打印。只需在while()循环内删除它并将其放在循环外。如下所示: -

while(){
}
print_r(); 

注意: - 一个有用的建议是切换到mysqli_*PDO是最好的,因为mysql_*已被正式弃用。

答案 1 :(得分:0)

$itemId = $itemData[id];就是问题所在。

变量$itemData[id]在该循环的上下文中不存在,因此它导致空值,然后

$orderItemsBySpend[$itemId] = $totalProductSpend;

有效地成为

$orderItemsBySpend[] = $totalProductSpend;

而是尝试:

$itemId = $itemData['id'];