James Mac
James Mac

Reputation: 494

PHP last added in array replaces all stored array values

What I'm trying to do:

  1. Get results from the database.
  2. Get required values by assigning to an stdClass.
  3. Put those objects in array. (<-The problem)
  4. And output as JSON.

The objects are fine they get correct values. But when they are assigned to the array once, they replace all previous array values.

I'm using CodeIgniter to do the DB stuff.

The function:

function get_prizes(){

    //All prize objects are stored here
    $prizes = array();

    //Prize object
    $prize = new stdClass();
    $prize->name1 = '';
    //$prize->type = '';

    //Getting the prizes from a simple database table
    $query = $this->db->get('prizes');

    if($query->num_rows() > 0){

        foreach ($query->result() as $row):

            $prize_name = $row->prize_name;
            $prize->name1 = $prize_name;
            //$prize->type = $prize_name;

            $prizes[] = $prize;

            echo " Item:  " . print_r($prizes, true) . "<br>";

        endforeach;

    }

    echo json_encode($prizes);

}

Output:

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"}]

I've tried array_push(). Also does the same thing.

Upvotes: 1

Views: 61

Answers (1)

Ismail RBOUH
Ismail RBOUH

Reputation: 10450

You need to instantiate the object inside foreach loop:

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

Upvotes: 2

Related Questions