Php 为什么每次我尝试向数组添加内容时都会覆盖当前数据?
我目前正在尝试使用PHP处理一个网站的购物车对象。我让购物车对象在多个网页上持久化 每当我向购物车中添加一些东西时,我首先检查该对象是否存在,如果它不存在,我会将其添加到项目数组中,但如果它确实存在,我只会更新现有项目的数量 但事实并非如此。每当我尝试向购物车中添加某些内容时,我的程序都无法识别购物车中已经存在的对象。此外,如果某个内容不在购物车中,它会将其添加到购物车中,但它会删除其中已有的内容,然后添加然后替换 在下面,您可以找到我检查其存在并添加的代码:Php 为什么每次我尝试向数组添加内容时都会覆盖当前数据?,php,html,arrays,serialization,Php,Html,Arrays,Serialization,我目前正在尝试使用PHP处理一个网站的购物车对象。我让购物车对象在多个网页上持久化 每当我向购物车中添加一些东西时,我首先检查该对象是否存在,如果它不存在,我会将其添加到项目数组中,但如果它确实存在,我只会更新现有项目的数量 但事实并非如此。每当我尝试向购物车中添加某些内容时,我的程序都无法识别购物车中已经存在的对象。此外,如果某个内容不在购物车中,它会将其添加到购物车中,但它会删除其中已有的内容,然后添加然后替换 在下面,您可以找到我检查其存在并添加的代码: public functi
public function obj_exists($item_id){
for($i=0;$i<$this->count;$i++){
if($this->items[$i]->getID()==(int)$item_id){
return $i;
}
}
return -1;
}
public function addToCart($item_id, $quantity){
$existing=$this->obj_exists($item_id);
echo $existing;
if(is_numeric($item_id) && is_numeric($quantity) && $quantity>=1){
if($existing==-1){
$newItem=new CartItem();
$newItem->setQuant($quantity);
$newItem->setID($item_id);
$this->items[]=$newItem;
$this->count++;
} else {
$this->items[$existing]->increment();
}
} else if (is_numeric($item_id) && is_numeric($quantity)) {
echo "Invalid quantity";
}
}
万一有人问我,下面是我的序列化和非序列化方法:
public function serialize_items() {
$serialized=array();
foreach($this->items as $item) {
$serialized[]=$item->__serialize();
}
return $serialized;
}
public function __serialize() {
return [
'count'=>$this->count,
'items'=>$this->serialize_items()
];
}
public function unserialize_items(array $data) {
$unserialized=array();
foreach($data as $item){
$tmpItem=new CartItem();
$tmpItem->unserialize($item);
$unserialized[]=$tmpItem;
}
return $unserialized;
}
public function __unserialize(array $data) {
$this->count=$data[0];
if(!is_null($data[1])){
$this->items=$this->unserialize_items($data[1]);
}
}
当您在
取消序列化后打印购物车时,您会看到正确的数据吗?(正如您使用0和1索引,而不是“计数”和“项目”)。这将帮助您确定问题是在序列化过程中还是在add方法中
public function serialize_items() {
$serialized=array();
foreach($this->items as $item) {
$serialized[]=$item->__serialize();
}
return $serialized;
}
public function __serialize() {
return [
'count'=>$this->count,
'items'=>$this->serialize_items()
];
}
public function unserialize_items(array $data) {
$unserialized=array();
foreach($data as $item){
$tmpItem=new CartItem();
$tmpItem->unserialize($item);
$unserialized[]=$tmpItem;
}
return $unserialized;
}
public function __unserialize(array $data) {
$this->count=$data[0];
if(!is_null($data[1])){
$this->items=$this->unserialize_items($data[1]);
}
}