未定义的偏移错误检查php

时间:2015-04-10 20:49:22

标签: php arrays loops undefined offset

我得到一个未定义的偏移误差。我知道为什么我得到了错误,它在哪里。我想解决的是如何实现适当的错误检查以防止这种情况发生。该方法目前通过ajax调用,因此错误导致返回任何字符串等问题。

以下是被调用的类方法,其变量是通过$ _GET设置的。

        $id = $_GET['id'];
        $product = $_GET['name'];
        $price = $_GET['price'];

        //check for existing product
        for($i = 0; $i <= count($_SESSION['BASKET']); $i++) {
                //if product exsits incrent by 1
                if($_SESSION['BASKET'][$i]['id'] == $id){
                    $_SESSION['BASKET'][$i]['amount'] = $_SESSION['BASKET'][$i]['amount'] + 1; 
                    break;
                //if doesnt exsist creat product array
                } else {
                    $item = array('id' => $id,'amount' => 1,'product' => $product,'price' => $price);           
                }
        } 

        if(isset($item)){
            //push product to session array
            array_push($_SESSION['BASKET'], $item);
        }

如您所见,该方法会检查购物篮当前是否包含产品,并通过递增数量来更新(&#39;金额&#39;)。我有一个在类中创建篮子数组的构造函数。调用$ _SESSION [&#39; BASKET&#39;]并且为空但仍然存在时会出现此问题:

array (
)

这会在检查if语句中的id时创建和未定义的偏移量错误,因为数组技术上存在但偏移量0不存在。任何想法我怎么能处理这个?。

我所做的代码更改会导致相同的错误

if(isset($_SESSION['BASKET'][$i]) && $_SESSION['BASKET'][$i]['id'] == $id){

1 个答案:

答案 0 :(得分:0)

我已将逻辑移到循环外并添加了一个bool变量,然后我可以查询它以检查是否在数组中找到了一个项目。这允许我创建另一个if语句来检查是否设置了会话值,而不是检查数组是否已创建。

        $id = $_GET['id'];
        $product = $_GET['name'];
        $price = $_GET['price'];
        $exsist = false;

        //check for existing product
        for($i = 0; $i <= count($_SESSION['BASKET']); $i++) {
            if(isset($_SESSION['BASKET'][$i])){
                //if product exsits incrent by 1
                if(isset($_SESSION['BASKET'][$i]) && $_SESSION['BASKET'][$i]['id'] == $id){
                    $_SESSION['BASKET'][$i]['amount'] = $_SESSION['BASKET'][$i]['amount'] + 1; 
                    $exsist = true;
                    break;
                } 
            }
        }

        if($exsist != true){
            $item = array('id' => $id,'amount' => 1,'product' => $product,'price' => $price);
            array_push($_SESSION['BASKET'], $item);         
        }