• ベストアンサー

MySQLから受け取ったデータを連想配列に代入

2点間の距離を計算し、距離と場所名を連想配列にしたいのですが。 例えばデータベースのテーブルに 1 x1,y1,地点A 2 x2,y2,地点B 3 x3,y3,地点C 4 x4,y4,地点D のように2点の座標と場所名が入っています。 これをデータベースから引っ張ってきて距離が100以上を代入 *データベースに接続済み while($col = mysql_fetch_array($res)) { $kyori = (xとyの距離計算); if($kyori > 100){連想配列に代入} } としたいのですが、どうもarray_pushではうまくいきません。 結果としては $hairetu=array(地点A => 150,地点B => 200,地点D => 120,); のようになっていて欲しいのですが。 表示時にasortでソートしたいのでこのようにしたいのですが どなたかお知恵を貸して頂けませんでしょうか? 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • racchoman
  • ベストアンサー率71% (20/28)
回答No.1

連想配列に代入する場合は、array_pushは使いません。 $hairetu['地点A'] = 150; のようにして代入します。

salemlight
質問者

お礼

お早いご回答、誠にありがとうございます。 私、根本から勘違いしていたようですね。 おっしゃる方法で期待通りの結果が得られました。 重ねての質問で大変恐縮ですが、結果を while($key,$value) = each($hairetu)){ print $key."=".$value."<BR>";} で表示できたのですが、100件以上ずらずらと表示されるので 20件づつ表示させようと思ったのですが、書籍によると 「連想配列はfor文でデータを取り出す事ができません」 とありました…。 こういった場合、皆様はどのように処理されてるのでしょうか?

その他の回答 (2)

  • la_pure
  • ベストアンサー率72% (18/25)
回答No.3

for文で連想配列が使えないってのがよくわかりませんが・・・ foreach使ったらどうでしょう? あまりキレイじゃないですけど。 10~20のみ表示なら $start = 10; $end = 20; $count = 0; foreach ($hairetu as $key => $val){ if($count >= $start && $count <= $end){ print $key."="$val; } $count++; } 適当にfunction作って引数で、startとend指定してあげればOKかと。 ちょっと無理矢理感がありますが・・・

salemlight
質問者

お礼

ご返答ありがとうございます。 こちらの方法でもうまくいきました。 お二方のお陰で今回は大変勉強になりました。 ありがとうございました。

  • racchoman
  • ベストアンサー率71% (20/28)
回答No.2

余りスマートなやり方ではないかもしれませんが、21件目~40件目まで表示したいならば、以下のようにすればできます。 $from = 21; $to = 40; for ($cnt=1; list($key,$value) = each($hairetu); $cnt++){ if ($from <= $cnt && $cnt <= $to) print $key."=".$value."<BR>"; }

salemlight
質問者

お礼

重ね重ねありがとうございます。 こちらの方法でページングを行うことができました。 現在ページを判定する変数をクエリで付加することで 希望の結果になりました。 もう少し勉強します。 ありがとうございました。

関連するQ&A