我得到一个未定义的偏移误差。我知道为什么我得到了错误,它在哪里。我想解决的是如何实现适当的错误检查以防止这种情况发生。该方法目前通过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){
答案 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);
}