2016-08-11 72 views
1

我正在循環使用CodeIgniter 2.x(PHP)中MySQL返回的數據庫對象。數組$gifts在開始之前已在循環外聲明。PHP數組未在foreach循環中設置自定義鍵

有一個內部循環和一個外部循環。外循環生成下面的第二個數組示例。內部循環生成問題數組。

在LINE 2中,$i['gifts'][$row->id_gift]正確設置了所需標識爲$row->id_gift的按鍵。在LINE 1中,它不是。陣列關鍵字按從0-n開始的數字順序進行分配,就好像它正在設置爲$gifts[][$sd] = $row->$sd一樣。

對此有何想法?

$query = $this->db->get(); 

if ($query->num_rows() > 0) 
{ 
    foreach ($query->result() as $row) 
    { 
     foreach ($select_details as $sd) 
     { 
      $gifts[$row->id_gift][$sd] = $row->$sd; // LINE 1 
      $i['gifts'][$row->id_gift] = array('merchant_rank'=>$i['merchant_rank'],'rank'=>$row->rank); // LINE 2 
     } 
    }     
} 

陣列(第1行)輸出樣本:

Array ( 
    [0] => 
    Array ( 
     [id_gift] => 392 
     [id_group] => 244 
     [rank] => 1 
    ) 
    [1] => Array ( 
     [id_gift] => 287 
     [id_group] => 239 
     [rank] => 1 
    ) 
    [2] => Array ( 
     [id_gift] => 264 
     [id_group] => 4 
     [rank] => 1) 
) 

陣列(LINE 2)輸出樣本(注意gifts陣列中的正確的鍵):

Array (
    [0] => Array 
    (
     [id] => 49 
     [id_group] => 49 
     [id_merchants] => 116 
     [gifts] => Array 
     (
      [392] => Array 
      (
       [merchant_rank] => 1 
       [rank] => 1 
      ) 
      [287] => Array 
      (
       [merchant_rank] => 1 
       [rank] => 2 
      ) 
      [264] => Array 
      (
       [merchant_rank] => 1 
       [rank] => 3 
      ) 
     ) 
    ) 
) 

已解決。如果您好奇,請參閱下面的答案。感謝您的幫助@Spartan和@DontPanic。

+0

而不是'$禮物[$按行> id_gift]'它的作用就像你使用'$禮物[]'會? –

+0

Post array aswell –

+0

@ Don'tPanic,是的,正確的。 – JessycaFrederick

回答

1

好的,我找出了問題所在。而你們中更有經驗的程序員可能並不會感到驚訝。

在後面的腳本中,我使用了破壞密鑰的多維數組排序。我確信有一種方法可以防止這種情況發生,但這不是恰當的。

usort($gifts, function($a, $b) { return $a['rank'] - $b['rank']; });