带索引""的数组在数据库检索之后

时间:2014-10-20 15:28:28

标签: php arrays

我正在练习PHP,试图了解这些细节。这样做,我正在一个小网店工作。其中一个功能是登录后检索购物车。这样可行,但不知何故,会出现一个带有索引的项目""在数组命令中。我不知道它是如何实现的,或者如何(如果我不能防止这种情况发生)将其从阵列中移除......我试图取消它,但这没有任何效果。这是创建$ _SESSION [' Bestellen']数组的代码:

        $query = "SELECT * FROM orders WHERE user_id = ".$_SESSION['user_id'];
        $result = mysqli_query($db, $query);
        while ($row = mysqli_fetch_assoc($result)){
            foreach($row as $key => $value){ 
                $order[$key] = $value;                  

                $_SESSION['Bestellen'][$order['product_id']]['aantal'] = $order['ammount'];
                $_SESSION['Bestellen'][$order['product_id']]['product_id'] = $order['product_id'];
            }                       

            $query = "SELECT product_name, price FROM products WHERE product_id = ".$order['product_id'];
            $result2 = mysqli_query($db, $query);
            while ($row2 = mysqli_fetch_assoc($result2)){
                foreach($row2 as $key2 => $value2){
                    $item[$key2] = $value2;

                    $_SESSION['Bestellen'][$order['product_id']]['product_name'] = $item['product_name'];
                    $_SESSION['Bestellen'][$order['product_id']]['price'] = $item['price'];

                }
            }
        }

我在数据库中订购了两个项目,但是数组最终有第三个项目(数组中的第一个),没有任何值,并且索引为"":

array(3) {
  [""]=>
  array(2) {
    ["aantal"]=>
    NULL
    ["product_id"]=>
    NULL
  }
  [1]=>
  array(4) {
    ["aantal"]=>
    string(2) "10"
    ["product_id"]=>
    string(1) "1"
    ["product_name"]=>
    string(6) "boutje"
    ["price"]=>
    string(4) "0.32"
  }
  [3]=>
  array(4) {
    ["aantal"]=>
    string(1) "7"
    ["product_id"]=>
    string(1) "3"
    ["product_name"]=>
    string(7) "schroef"
    ["price"]=>
    string(4) "0.15"
  }
}

它是如何实现的?我该如何防止这种情况发生?

1 个答案:

答案 0 :(得分:1)

看起来$order['product_id']缺失或为空。检查数据库以确保行product_id存在且不为空。

.... 它可能只是它不存在 ..

        foreach($row as $key => $value){ 
            $order[$key] = $value;                  
        }
        $_SESSION['Bestellen'][$order['product_id']]['aantal'] = $order['ammount'];
        $_SESSION['Bestellen'][$order['product_id']]['product_id'] = $order['product_id'];

在尝试使用会话中的变量之前,遍历结果并设置$ order数组。

另外,请确保首先初始化$ order数组,否则您可能会收到未设置的变量通知..

$order = []; //somewhere above your loop