2016-07-05 31 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';因此,您需要在每次迭代中創建一個新對象。 –