Php 为什么每次我尝试向数组添加内容时都会覆盖当前数据?

Php 为什么每次我尝试向数组添加内容时都会覆盖当前数据?,php,html,arrays,serialization,Php,Html,Arrays,Serialization,我目前正在尝试使用PHP处理一个网站的购物车对象。我让购物车对象在多个网页上持久化 每当我向购物车中添加一些东西时,我首先检查该对象是否存在,如果它不存在,我会将其添加到项目数组中,但如果它确实存在,我只会更新现有项目的数量 但事实并非如此。每当我尝试向购物车中添加某些内容时,我的程序都无法识别购物车中已经存在的对象。此外,如果某个内容不在购物车中,它会将其添加到购物车中,但它会删除其中已有的内容,然后添加然后替换 在下面,您可以找到我检查其存在并添加的代码: public functi

我目前正在尝试使用PHP处理一个网站的购物车对象。我让购物车对象在多个网页上持久化

每当我向购物车中添加一些东西时,我首先检查该对象是否存在,如果它不存在,我会将其添加到项目数组中,但如果它确实存在,我只会更新现有项目的数量

但事实并非如此。每当我尝试向购物车中添加某些内容时,我的程序都无法识别购物车中已经存在的对象。此外,如果某个内容不在购物车中,它会将其添加到购物车中,但它会删除其中已有的内容,然后添加然后替换

在下面,您可以找到我检查其存在并添加的代码:

    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]);
        }
    }