2012-04-30 5 views
0

$gに格納された結果は1と2です。以下のコードは私が書いたものですが、私の$array['music']は最後の2の要素しか保存しません。 SQLクエリをforeachの下で2回実行し、$gの値が1と2の値をmu_idmu_idは別のテーブルmusicの列名)と一致させ、行1と2のすべての行データを$array['music']に格納します。配列はPHPの最後の要素によって上書きされます

2番目の行(2)は1ではなく、2番目のループで実行しているときに上書きしています。それを動作させるロジックがあれば教えてください。あなたはそれに追加するのではなく、配列全体たびに再宣言している

foreach($genre as $g) 
    { 
     echo $g; 
     echo "<br>"; 
     $array['music'] = $m -> where('mu_id', $g) -> get(); 
    } 
+0

$ gとは何ですか? $ mとは何ですか?あなたの変数に適切な名前を付けると、従うのが簡単になります。 ABCをもう一度学ぶ必要はありません。 –

+0

@Truth:CI Datamapperのドキュメントでは、すべての例で1文字変数を使用しているので、おそらくこれらの例をコピーしているだけです。私はそれが悪い習慣であることに同意するが、この場合、「$ g」は「ジャンル」であり、「$ m」は「音楽」であると仮定する。私はまた、完全な言葉を使用します。 –

+0

@madmartigan私はそれをよく知っています。私は、配列の基本を理解することなく、盲目的に例をコピーするだけでなく、自分でそれを行うべきではないということを述べています。 –

答えて

6

、代わりにこれを使用する:

foreach($genre as $g) 
{ 
    $array['music'][] = $m->where('mu_id', $g)->get(); 
} 

またはより良い、より少ないクエリ:

$array['music'] = $m->where_in('mu_id', $genre)->get(); 
+0

ありがとう。私がcodeigniterとdatamapperを初めて使ったとき、私はそれを動作させる方法を考えていました。これは私にとって魔法のようなものです。これが完全に機能しているので、私は本当に幸せです。どのような迅速な返信!!!もう一度ありがとう... :) –

+1

CIとDMの両方が本当に良いドキュメントを持っているので、よく読んでください。つまり、これはちょうど基本的なPHPミスであり、PHPには本当に良いドキュメントがあります。よく参照するようにしてください。 –

0

したい場合にすべてのデータを配列に格納するには、$array['music']の代わりに$array['music'][]を使用する必要があります。

関連する問題