2016-07-05 45 views
1

我想要做的事:PHP在数组最后添加替换所有存储阵列值

  1. 从数据库中获取结果。
  2. 通过分配给stdClass来获取所需的值。
  3. 将这些对象放在数组中。 (<-问题)
  4. 并输出为JSON。

对象没问题,他们得到正确的值。但是,当它们被分配给数组一次时,它们会替换所有以前的数组值。

我使用CodeIgniter来做数据库的东西。

功能:

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

} 

输出:

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

我试过array_push()。也做同样的事情。

回答

2

您需要实例里面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); 
} 
+0

谢谢你,完美的作品。为什么需要在里面实例化?它是如何改变数组中的值,如果他们已经分配? –

+1

在PHP中,对象是通过引用传递的,所以当你在循环外部创建对象时,每次迭代只会使用一个对象,并将被添加到数组中(使用不同的索引)。属性'name1'将保留最后一个值'Toaster';因此,您需要在每次迭代中创建一个新对象。 –