最后添加到数组中的PHP将替换所有存储的数组值

最后添加到数组中的PHP将替换所有存储的数组值,php,arrays,codeigniter,Php,Arrays,Codeigniter,我想做的是: 从数据库中获取结果 通过分配给stdClass来获取所需的值 将这些对象放入数组中。(您需要在foreach循环中实例化对象: function get_prizes() { // All prize objects are stored here $prizes = array(); // Getting the prizes from a simple database table $query = $this->db->get('

我想做的是:

  • 从数据库中获取结果
  • 通过分配给stdClass来获取所需的值

  • 将这些对象放入数组中。(您需要在
    foreach
    循环中实例化对象:

    function get_prizes()
    {
        // All prize objects are stored here
        $prizes = array();
    
        // Getting the prizes from a simple database table
        $query = $this->db->get('prizes');
        if ($query->num_rows() > 0) {
            foreach($query->result() as $row):
    
                // Prize object    
                $prize = new stdClass();
    
                // $prize->type = '';
                $prize->name1 = $row->prize_name;
    
                $prizes[] = $prize;
    
            endforeach;
        }
    
        echo json_encode($prizes);
    }
    

    谢谢,工作得很好。为什么它需要在内部实例化?如果数组中的值已经赋值,它如何改变数组中的值?在PHP中,对象是通过引用传递的,因此当您在循环外部创建对象时,每次迭代只会使用一个对象,并将其添加到数组中(使用不同的索引)属性
    name1
    将保留最后一个值,即
    Toaster
    ;因此,您需要在每次迭代时创建一个新对象。
    Item: Array ( [0] => stdClass Object ( [name1] => Radio ) ) 
    Item: Array ( [0] => stdClass Object ( [name1] => Television ) [1] => stdClass Object ( [name1] => Television ) ) 
    Item: Array ( [0] => stdClass Object ( [name1] => Toaster ) [1] => stdClass Object ( [name1] => Toaster ) [2] => stdClass Object ( [name1] => Toaster ) ) 
    [{"name1":"Toaster"},{"name1":"Toaster"},{"name1":"Toaster"}]
    
    function get_prizes()
    {
        // All prize objects are stored here
        $prizes = array();
    
        // Getting the prizes from a simple database table
        $query = $this->db->get('prizes');
        if ($query->num_rows() > 0) {
            foreach($query->result() as $row):
    
                // Prize object    
                $prize = new stdClass();
    
                // $prize->type = '';
                $prize->name1 = $row->prize_name;
    
                $prizes[] = $prize;
    
            endforeach;
        }
    
        echo json_encode($prizes);
    }