[PHP-users 17851]Re: DB取得配列をカスタマイズしたい。

aiko vvv_aiko_vvv @ hotmail.com
2003年 9月 12日 (金) 07:36:46 JST


お世話になっております。きしかわです。

アドバイスを頂いた通り、
>foreach($aDbData as $val) {
>  $tmpData[$val[A_id]][]=$val[B_id];
>}

>for ($i=0; $i<count($aDbData); $i++) {
>	$bDbData[$aDbData[$i]["A_id"]][] = $aDbData[$i]["B_id"];
>}

のどちらも"A_id"が同じものは配列に上書きされ、"B_id"のデータが
紐付いて行くという考えですね。
目がさめる様でした(笑)!

もう少し発展させたいので、お付き合いくださいm(_ _)m
最初、投稿した場合は、分かりやすい様に、
A_id,、B_idしか存在しないバージョンをサンプルに考えていたのですが、
本来は、A_id、A_nm、B_id、B_nmが存在します。

$aDbData[0]["A_id"]="A001";
$aDbData[0]["A_nm"]="A001_NM";
$aDbData[0]["B_id"]="B001";
$aDbData[0]["B_id"]="B001_NM";

$aDbData[1]["A_id"]="A001";
$aDbData[1]["A_nm"]="A001_NM";
$aDbData[1]["B_id"]="B002";
$aDbData[1]["B_id"]="B002_NM";
		:
		:
		:
	( A001に紐づく数は不明 )

$aDbData[2]["A_id"]="A002";
$aDbData[2]["A_nm"]="A002_NM";
$aDbData[2]["B_id"]="B005";
$aDbData[2]["B_id"]="B005_NM";

$aDbData[3]["A_id"]="A002";
$aDbData[3]["A_nm"]="A002_NM";
$aDbData[3]["B_id"]="B006";
$aDbData[3]["B_id"]="B006_NM";
		:
		:
		:
		:
	( A002に紐づく数は不明 )


上記のやり方で

var aData = new Array();
aData[0] = new Array(
    new data( "B001_NM", "B001" ),
    new data( "B002_NM", "B002" )
                :
                : 
    );

aData[1] = new Array(
    new data( "B005_NM", "B005" ),
    new data( "B006_NM", "B006" )
               :
               :
    );
  :
  :
  :

アドバイスを基に、AとBの連想配列は完成したのですが、JavaScript生成で行き詰
まってしまいました。

// A_idをキーにした連想配列にB_idのデータを入れる。
// A_nmをキーにした連想配列にA_nmのデータを入れる。
$cnt=count($aDbData)
for ($i=0; $i<$cnt; $i++) {
  $id=$aDbData[$i]["A_id"];
  $nm=$aDbData[$i]["A_nm"];

  $aData[$id][] = $aDbData[$i]["B_id"];
  $aData[$nm][] = $aDbData[$i]["B_nm"];
}

最初からidとnmが存在することをお知らせしておいた方が良かったのですが、
自分的に混乱していたためまず簡単なサンプルで質問させて頂いた次第です。

すみませんが、もう少しアドバイスいただいてよろしいでしょうか。
よろしくお願いします。


>DBから取得する配列は変更できないのでしょうか?
>A_idで関連付けたいならA_idをキーにして配列を
>構成すれば取り出すのが楽になります。

Aテーブル
A_id
A_nm
B_id

Bテーブル
B_id
B_nm

に登録されている全てのデ−タを取得したいので、
AテーブルとBテーブルを結合させて、ORDER BY A_id , B_id にて取得するようにし
ました。
もう少し要領良く取得できれば、セレクトボックス作成も容易になるのでしょうか(
泣)!
#時間かけすぎの感があります…


>配列の処理は(僕的には)基本中の基本だと思っていますので、
>じっくり何度もやって慣れるようにしたほうがいいと思いますよ。
確かに。配列を上手く使えるようになれば、要領良くプログラムできますよね。
1回やるとなんとなくできる様になるのですが、知らないところから
編み出すのはとても苦労します。


きしかわあいこ。

_________________________________________________________________
キャリアアップを目指すあなたのナビゲーター MSN 就職・転職  
http://career.msn.co.jp/ 



PHP-users メーリングリストの案内