【发布时间】:2015-04-10 20:49:21
【问题描述】:
我得到一个未定义的偏移错误。我知道为什么我会收到错误以及它在哪里。我想要解决的是如何实施适当的错误检查以防止这种情况发生。该方法当前正在通过 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);
}
如您所见,该方法检查篮子当前是否包含产品并通过增加数量(“数量”)进行更新。我有一个在类中创建篮子数组的构造函数。当 $_SESSION['BASKET'] 被调用并且为空但仍然存在时会出现问题:
array (
)
这会在检查 if 语句中的 id 时创建和未定义的偏移量错误,因为数组在技术上存在但偏移量 0 不存在。有什么想法可以解决这个问题吗?。
我所做的代码更改导致相同的错误
if(isset($_SESSION['BASKET'][$i]) && $_SESSION['BASKET'][$i]['id'] == $id){
【问题讨论】:
-
您可以尝试使用 isset() 和/或 empty 来检查 $_SESSION['BASKET'] 数组的有效性吗? if (isset(
) && (!empty( ))) -
在第二种情况下仍然查询会话的id,所以仍然提供相同的错误
-
你能用你所做的代码更改更新你的问题吗?
-
添加了我尝试过的代码更改,确实停留在解决方案上。我可以让循环从 1 开始,当我创建会话数组时,放置一个空条目,以便它始终存在。但我真的不想在其他地方编辑大量代码,这似乎是一个有点晦涩的解决方案。
-
检查是否存在 if 循环之外的值,您正在检查会话 id 值是否 = $id。如果值不存在,则控件不应转到代码的那部分。
标签: php arrays loops undefined offset