未定义的偏移量错误检查 php

Undefined offset Error checking php

我收到一个未定义的偏移错误。我知道为什么我会收到错误以及它在哪里。我正在努力解决的问题是如何实施适当的错误检查以防止这种情况发生。当前正在通过 ajax 调用该方法,因此错误原因与任何字符串的 return 等相关

下面是 class 的方法被调用,它的变量正在通过 $_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);
        }

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

array (
)

当检查 if 语句中的 id 时,这会产生未定义的偏移量错误,因为数组在技术上存在,但偏移量 0 不存在。有什么办法可以处理吗?

我所做的代码更改导致了同样的错误

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

我已将逻辑移到循环外并添加了一个 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);         
        }