2016-08-11 17 views
1

私はCodeIgniter 2.x(PHP)でMySQLから返されたデータベースオブジェクトをループしています。配列$giftsは、ループが開始される前にループ外で宣言されています。PHP配列がforeachループでカスタムキーを設定しない

内部ループと外部ループがあります。外側のループは、以下の2番目の配列の例を生成します。内部ループが問題の配列を生成します。

LINE 2では、$i['gifts'][$row->id_gift]は、希望のIDで$row->id_giftのキーを正しく設定しています。 LINE 1ではそうではありません。配列キーは、$gifts[][$sd] = $row->$sdで設定されているかのように、0からnの順番で数値的に割り当てられています。

なぜでしょうか?

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

アレイ(ライン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

投稿配列も –

+0

@ Don'tPanic、はい、正しい。 – JessycaFrederick

答えて

1

さて、私は問題を理解しました。経験豊富なプログラマーがあなたに驚くほどのものではないかもしれません。

後で私はキーを破壊している多次元配列の並べ替えを使用しています。それを防ぐ手段があると確信していますが、それはここでは関係ありません。代わりに `$贈り物の

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

関連する問題