• ベストアンサー

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

  • 3つの連想配列を交互に代入して、新しい連想配列を作りたい

    PHP Version 5.1.6を使っています。 それぞれの連想配列を先頭から順番に交互に代入したいのですが、 どのようなプログラムでできるのでしょうか? $arr1 = array(a1=>"aa1", a2=>"aa2", a3=>"aa3"); $arr2 = array(b1=>"bb1", b2=>"bb2", b3=>"bb3"); $arr3 = array(c1=>"cc1", c2=>"cc2", c3=>"cc3"); 代入後 $new_arr = array(  a1=>"aa1",  b1=>"bb1",  c1=>"cc1",  a2=>"aa2",  b2=>"bb2",  c2=>"cc2",  a3=>"aa3",  b3=>"bb3",  c3=>"cc3", );

    • ベストアンサー
    • PHP
  • 連想配列を配列に入れるには

    下記のような連想配列を配列に入れる簡単な方法はありますか。 array("a"=>"1","b"=>"2") 期待する結果(print_r) Array ( [0] => Array ( "a" => "1" ) [1] => Array ( "b" => "2" ) ) 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 連想配列の代入処理

    初心者ですが、 三次元の連想配列に対して以下のように処理したいです。 $a =Array ( [0] => Array ( [Post] => Array ( [name] => FireFox [value] => 30 ) ) [1] => Array ( [Post] => Array ( [name] => Others [value] => 25 ) ) [2] => Array ( [Post] => Array ( [name] => IE [value] => 38 ) ) [3] => Array ( [Post] => Array ( [name] => Opera [value] => 7 ) )); それを $b = array( 'Firefox' => array( 'value' => 30 ), 'Others' => array( 'value' => 25 ), 'IE' => array( 'value' => 38 ), 'Opea' => array( 'value' => 7 ) ); に変換したいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • responseTextから連想配列へ

    ajaxによってサーブレットから以下のresponseTextを取得したとします。 ~ A ~ a : aa b : bb c : cc ~ B ~ d : dd このようなレスポンスから var array; array["a"] = 'aa'; array["b"] = 'bb'; というように連想配列を取得したいのですが、どのようにすれば良いかわかりません。 どなたか力を貸していただけませんか?

  • 連想配列の一部分を全て表示したいのですが・・。

    すみません。phpの事はあまりわからないのですが、以下のような連想配列がありまして、 (下記のような連想配列が大量にあります。) Array ( [0] => Array ( [a] => 1111 [0] => 1111 [b] => 2222 [1] => 2222 [c] => 3333 [2] => 3333 ) [1] => Array ( [a] => 5555 [0] => 5555 [b] => 6666 [1] => 6666 [c] => 7777 [2] => 7777 ) ) 上の配列から下記の配列のみ全て表示したいのですがどう記述したらよいでしょうか。 Array[0][a] Array[0][b] Array[0][c] Array[1][a] Array[1][b] Array[1][c]

    • ベストアンサー
    • PHP
  • 【PHP】配列を連想配列に

    $m = array('a', 'b', 'c'); この配列 $m をもとに $n = array(  'a' => array(   'b' => array(    'c' => array()))); 上のような連想配列 $n をつくりたいのですが、 $n = array(  $m[0] => array(   $m[1] => array(    $m[2] => array()))); 要素の数が固定のときは、これでもいいのですが、数が変動する場合に対応できません。 何か方法があれば教えてください。

    • ベストアンサー
    • PHP
  • 配列の中に配列を入れて後で代入できるように残したい

    for($b=0;$b<$row;$b++) { //取得したレコード件数まで繰り返す $array = sqlite_fetch_array($result); $a=$array[0]; $x[$b]=null; //やり方が分からずとりあえず空白に $y[$b]=$a*$x[$b]; $sum[0] = array_sum($y); } $x[1]=3; //ここは$x[$b]=0,1 のできれば2択にしたかったんですがやり方が分からず困ってます $goukei=$sum[0]; if($goukei=<800 and $goukei>=600){ echo"$sum"; } $sum内の$x[$b]がループ後に代入可能な状態で格納する方法がありましたらどうか教えてください

    • 締切済み
    • PHP
  • D言語の連想配列をコピーしたい

    D言語で連想配列をコピーしたいのですが、 int[char[]] x; int[char[]] y; for(char[] a,int b;x) { y[a]=b; } などと要素を一つ一つコピーするしかないのでしょうか。 もっと効率のよいコピーはないのでしょうか。

  • 連想配列のキー値(連番)を基に、別の配列を作るには?

    下記のように、キー値の一部に連番を持った連想配列 があるのですが、このキー値と連番で別の配列を 簡単に作る方法は無いでしょうか? もとの配列 $ary = array("item0"=>"x","item1"=>"y","item2"=>"z","data0"=>"o","data1"=>"p","data2"=>"q"); 上の$aryから $item=array([0]=>"x",[1]=>"y",[2]=>"z"); $data=array([0]=>"o",[1]=>"p",[2]=>"q"); のような形の配列を得たいのです。 foreach($ary as $key => $val){ } の構文で、$key値を調べて分断し、新しい配列に pushしていくしかないでしょうか? ※PHP4.3です

    • ベストアンサー
    • PHP
  • 配列に動的に連想配列を入れる方法を教えてください

    質問させてください。 $mods = array('def', 'con', 'vie'); (ここでは$modsの要素は3つですが、環境によって要素の数が変わるとします。) これを連想配列で array( 'def' => './a/b/def/o', 'con' => './a/b/con/o', 'vie' => './a/b/vie/o' ) のような形に動的にしたいと思います。 その為 array( $mods[$i] => './a/b/' . $mod[$i] . '/o', ) のように$modsの要素数だけ動的に入れていきたいのですがどのようにすればいいのでしょうか? array_push()だと値だけが入ると思うので、良く分かりませんでした。 $front->setControllerDirectory(array( 'default' => APP_DIR . DS . 'modules' . DS . 'default' . DS . 'controllers' )); のようなルーターにパスをその時の環境に合わせて$key=>$valueの連想配列をどんどん入れていきたいと考えております。 説明が分かりにくいかもしれませんが宜しくお願いします。

    • ベストアンサー
    • PHP