0

テーブルから名前配列に値を入れようとしていますが、配列エントリが相互にオーバーライドしています

コード:

$list = array();
$name = db_query("SELECT name FROM {name_list}");
while ($num = db_fetch_array($name)){
$list[$num['name']]=array('title'=>$num['name']);
}
$values = db_query("SELECT id,name1,name2 FROM {status}");
while ($val = db_fetch_array($values)){
$list[$val['name1']] = array($val['id'] =>$val['id']);
$list[$val['name2']] = array($val['id'] =>$val['id']);
}
$output .= dprint_r($list);

最初のwhileループは、namedbテーブルの名前である各配列のタイトルを書き込みます。
テーブル:

name
Alice
Kate
Jason
John
Sam

2番目のwhileループは、次のようなステータステーブルに入ります。

id name1 name2
1   Alice Kate
2   Jason Kate
3   Kate  Alice
4   Jason John

最終的な配列は次のようになります
。Alicearray(1,3);
ジェイソン配列(2,4);
ケイト配列(1,2,3);
サム配列();
等...

代わりに、
アリス(3)ジェイソン(4)ケイト(3)などのように見えます。

4

1 に答える 1

1

テスト用の drupal はありませんが、エラーは明らかです。演算子を使用して[]、id-per-name 配列の末尾に要素をプッシュします。試す :

$list = array();
$name = db_query("SELECT name FROM {name_list}");
while ($num = db_fetch_array($name)){
    $list[$num['name']]=array(); // initialize as empty array. you won't need the name
                                 // twice as its already the index to $list
}
$values = db_query("SELECT id,name1,name2 FROM {status}");

while ($val = db_fetch_array($values)){
    $list[$val['name1']][] = $val['id']; // add id to the first name's list
    $list[$val['name2']][] = $val['id']; // add id to the second name's list
}
于 2013-02-26T21:35:02.590 に答える