重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

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でソートしたいのでこのようにしたいのですが
どなたかお知恵を貸して頂けませんでしょうか?
宜しくお願いします。

A 回答 (3件)

連想配列に代入する場合は、array_pushは使いません。


$hairetu['地点A'] = 150;
のようにして代入します。
    • good
    • 0
この回答へのお礼

お早いご回答、誠にありがとうございます。
私、根本から勘違いしていたようですね。
おっしゃる方法で期待通りの結果が得られました。
重ねての質問で大変恐縮ですが、結果を

while($key,$value) = each($hairetu)){
print $key."=".$value."<BR>";}

で表示できたのですが、100件以上ずらずらと表示されるので
20件づつ表示させようと思ったのですが、書籍によると
「連想配列はfor文でデータを取り出す事ができません」
とありました…。
こういった場合、皆様はどのように処理されてるのでしょうか?

お礼日時:2007/04/06 12:38

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かと。

ちょっと無理矢理感がありますが・・・
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/09 12:05

余りスマートなやり方ではないかもしれませんが、21件目~40件目まで表示したいならば、以下のようにすればできます。



$from = 21;
$to = 40;

for ($cnt=1; list($key,$value) = each($hairetu); $cnt++){
if ($from <= $cnt && $cnt <= $to) print $key."=".$value."<BR>";
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/09 12:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!