2012-03-23 14 views
1

私はこれを得続ける、次の私の配列をフォーマットすることはできません:が正しくクエリ

[0] => Array 
    (
     [0] => Array 
      (
       [thread_id] => 136 
       [owner_id] => 1 
       [subject] => asdhjkasdh 
       [body] => askjdhaksjd 
       [timestamp] => 2012-03-22 22:03:51 
       [slug] => asdhjkasdh 
      ) 

    ) 
[1] => Array 
    (
     [0] => Array 
      (
       [thread_id] => 137 
       [owner_id] => 1 
       [subject] => asdhjkasdh 
       [body] => askjdhaksjd 
       [timestamp] => 2012-03-22 22:03:56 
       [slug] => asdhjkasdh 
      ) 

    ) 

しかし、私は、それぞれが[0]と[1]のデータではなく、別の配列を含むようにする必要があります。

私のコードは次のとおりです。最初のクエリは配列形式のthread_idを返します。次に、thread_idを使用してスレッドテーブルから情報を取得します。私は配列で正しく整理するように見えることはできませんが。

  $query = $this->db->query($sql); 
      $result = $query->result_array(); 
      $thread = array(); 
      foreach ($result as $thread_id) 
      { 
       $id = $thread_id['thread_id']; 
       $query = $this->db->query("SELECT * FROM thread WHERE thread_id='$id'"); 
       array_push($thread, $query->result_array()); 
      } 
      print_r($thread); 
      return $thread; 

ありがとう!

+0

質問には関係ありませんが、入れ子になったPHPループの代わりにSQL結合を使用する必要があります。 – bfavaretto

答えて

2

それはあなたのデータベースオブジェクトが$スレッドアレイに押されている多次元配列を返しているように見えます。 代わりの

array_push($thread, $query->result_array()); 

あなたは、1つのクエリを実行した結果をループして、別のクエリを実行しているようにも見えますが、それ

$thisRow = $query->result_array(); 
array_push($thread, $thisRow[0]); 

を試してみてください。これは通常、データを取得する効率的な方法ではなく、通常はJOINを使用してリファクタリングできます。別のクエリを新しい質問として投稿すると、改善のお手伝いをすることができます。

+0

array_push($ thread、$ query-> row()); – snaderss

1

利用array_mergeの代わりarray_pushは、

0

$query->result_array()は、配列が1行しかなくても配列を与えるためです。 その後、その配列を配列($ thread)にプッシュします。

あなたは、常に1つの行を取得することを確認している場合は、あなたがより良い

$row = $query->row(); 

を使用することができます多分確認するために、あなたのクエリにLIMIT 1を追加;)

また

$thread[] = $query->row(); 
を行うことができます