- ベストアンサー
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でソートしたいのでこのようにしたいのですが どなたかお知恵を貸して頂けませんでしょうか? 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
連想配列に代入する場合は、array_pushは使いません。 $hairetu['地点A'] = 150; のようにして代入します。
その他の回答 (2)
- la_pure
- ベストアンサー率72% (18/25)
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かと。 ちょっと無理矢理感がありますが・・・
お礼
ご返答ありがとうございます。 こちらの方法でもうまくいきました。 お二方のお陰で今回は大変勉強になりました。 ありがとうございました。
- racchoman
- ベストアンサー率71% (20/28)
余りスマートなやり方ではないかもしれませんが、21件目~40件目まで表示したいならば、以下のようにすればできます。 $from = 21; $to = 40; for ($cnt=1; list($key,$value) = each($hairetu); $cnt++){ if ($from <= $cnt && $cnt <= $to) print $key."=".$value."<BR>"; }
お礼
重ね重ねありがとうございます。 こちらの方法でページングを行うことができました。 現在ページを判定する変数をクエリで付加することで 希望の結果になりました。 もう少し勉強します。 ありがとうございました。
お礼
お早いご回答、誠にありがとうございます。 私、根本から勘違いしていたようですね。 おっしゃる方法で期待通りの結果が得られました。 重ねての質問で大変恐縮ですが、結果を while($key,$value) = each($hairetu)){ print $key."=".$value."<BR>";} で表示できたのですが、100件以上ずらずらと表示されるので 20件づつ表示させようと思ったのですが、書籍によると 「連想配列はfor文でデータを取り出す事ができません」 とありました…。 こういった場合、皆様はどのように処理されてるのでしょうか?