PHPのフォーム情報を連想配列に格納する方法

このQ&Aのポイント
  • PHPのフォーム情報を連想配列に格納する方法について教えてください。
  • 具体的なフォームは、東京、神奈川、千葉の3つにチェックが入った場合の値を格納する方法が知りたいです。
  • 単純にarray_pushを使用して連想配列に値を追加しようとしましたが上手くいきませんでした。どのようにすれば良いでしょうか?
回答を見る
  • ベストアンサー

formの情報を連想配列に

お世話になります。 formのチェックボックスの情報を連想配列に格納したいのですが □東京 □神奈川 □千葉 □埼玉 □茨城 [ 送信 ] というフォームがあったとして 東京、神奈川、千葉の3つにチェックが入り送信されると この3つの値を格納するにはどうすればよいのでしょうか? 単純に、下のようにしたくて・・・ array_pushを使うのかなと思うのですが上手くいきません。 Array ( [0] => tokyo [1] => kanagawa [2] => chiba ) ご教授お願いします。

  • PHP
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

こういう場合常套手段としてnameに[]をつけることが多いですね。 なおエスケープの問題がめんどうなのでヒアドキュメントを使用するといいですね <?PHP $list = array("tokyo"=>"東京","kanagawa"=>"神奈川","chiba"=>"千葉","saitama"=>"埼玉","ibaragi"=>"茨城"); $str=""; foreach($list as $key => $val){ $str.=<<<eof <input type="checkbox" value="{$key}" name="data[]" id="check_{$key}"><label for="check_{$key}">{$val}</label><br> eof; } $str=<<<eof <form method="GET"> $str <input type="submit" value="送信"> </form> eof; print $str; if($_GET["data"]) print_r($_GET["data"]); ?>

oosaka2000
質問者

お礼

nameが同じだとダメなんですね!勉強になりました~ わざわざありがとうございました。

その他の回答 (2)

回答No.2

□東京 □神奈川 □千葉 □埼玉 □茨城 [ 送信 ] この部分のソースを書いてもらえるでしょうか? チェックボックスのnameが同じになっている気がします。

oosaka2000
質問者

補足

nameが同じだとダメなのですか??初心者ですいません。 ソースは $list = array("tokyo"=>"東京","kanagawa"=>"神奈川","chiba"=>"千葉","saitama"=>"埼玉","ibaragi"=>"茨城"); echo "<form method=GET>"; foreach($list as $key => $val){  echo "<input type=checkbox value={$key} name=data>{$val}<br>"; } echo "<input type=submit value=\"送信\"></form>"; $data[] = $_GET[data]; です。

回答No.1

formからpostやgetでsubmitされた値は自動的に連想配列に格納されます。 print_r($_POST)で表示できるはずです。 Array ( [0] => tokyo [1] => kanagawa [2] => chiba ) これは連想配列ではなく、普通の配列ではないでしょうか?

oosaka2000
質問者

補足

配列でした、失礼しました。 3つ選択してsubmitしても結果は Array ( [0] => chiba ) となるのですが、なぜでしょうか??

関連するQ&A

  • 思うような連想配列ができない・・

    省略して説明します。 関東,東京,神奈川,千葉 中部,愛知,静岡,岐阜 関西,大阪,兵庫,京都 というCSVデータがあり これを以下のような、連想配列にしたいのですがどうすればよいのでしょうか?? Array (   [0] => Array    (      [0] => 関東      [1] => 東京      [2] => 神奈川      [3] => 千葉    )   [1] => Array    (      [0] => 中部      [1] => 愛知      [2] => 静岡      [3] => 岐阜    )   [2] => Array    (      [0] => 関西      [1] => 大阪      [2] => 兵庫      [3] => 京都    ) ) --------------------------------- CSVデータを、feofで終端まで読み込み feofで一行ずつ取得 explodeでコンマで分解まではできるのですが 上記のような、連想配列ができません・・。 ご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • multipart/form-dataを使ったデータ送信について

    色々調べましたが分からなかったので質問させてください。 ある配列データをmultipart/form-dataを使い送信したいと、 考えています 例) [sample1.php] $data = array("saitama","kanagawa","chiba"); //このsample1.phpファイルから$dataをmultipart/form-dataを使い、 //sample2.phpファイルに送信したいと考えています。 [sample2.php] //$dataを受け取る 調べましたがフォームを介して送信する方法はいくつかありましたが、 フォームを使わずに送信する方法がわかりませんでした。 どなかた教えていただけないでしょうか。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • phpの再帰処理で平坦な連想配列をツリー化

    phpに関して質問させて頂きます。 最近、phpの勉強を始め、再帰処理でつまづいております。 具体的には、以下の様な連想配列を作り $tourist_spot = array(  'a' => array('日本','東京都','台東区','浅草','浅草寺',10),  'b' => array('日本','東京都','千代田区','大手町','首塚',5),  'c' => array('日本','千葉県','浦安市','舞浜','ディズニーランド',10),  'd' => array('日本','東京都','台東区','浅草','浅草演芸ホール',7), ); この連想配列に、再帰処理をかけて以下ようなツリー状の連想配列を生成しようと試みていますが、どうしても上手く行きません。 基本は添字に値を格納し、末端のみ値を数値として格納する感じです。 array(1) { ["日本"]=>  array(1) {   ["東京都"]=>   array(1) {    ["台東区"]=>    array(1) {     ["浅草"]=>     array(2) {      ["浅草寺"]=>      int(10)      ["浅草演芸ホール"]=>      int(7)     }    }    ["千代田区"]=>    array(1) {     ["大手町"]=>     array(1) {      ["首塚"]=>      int(5)     }    }   ["千葉県"]=>   array(1) {    ["浦安市"]=>    array(1) {     ["舞浜"]=>     array(1) {      ["ディズニーランド"]=>      int(10)     }    }   }  } } コード例などご提示頂けますと幸いですが、ややこしいようであれば、どのような考え方で望めば良いのかだけでもご教示を賜りたく存じます。 お詳しい方いらっしゃいましたら何卒、宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • 2つの連想配列を比較して一致するものを出力

    下記のような連想配列が2つあります。 それらの配列の3つ目の電話番号(070-0000-000等)のみを比較して一致する連想配列を配列にして出力するようなプログラムを考えています。 連想配列同士を比較する方法が見つからなかったため、どのように書いたら良いのかわかりません。 ご教授お願い致します。 【既存の連想配列】 <?php $first = array(     'test_1' => array(         0 => '山田太郎',         1 => 'ヤマダタロウ',         2 => '090-0000-0000',     ),     'test_2' => array(         0 => '田中次郎',         1 => 'タナカジロウ',         2 => '080-0000-0000',     ),     'test_3' => array(         0 => '佐藤三郎',         1 => 'サトウサブロウ',         2 => '070-0000-0000',     ), ); $second = array(     'test_1' => array(         0 => '鈴木四郎',         1 => 'スズキシロウ',         2 => '050-0000-0000',     ),     'test_2' => array(         0 => '佐藤五郎',         1 => 'サトウサブロウ',         2 => '070-0000-0000',     ),     'test_3' => array(         0 => '安藤六郎',         1 => 'アンドウロクロウ',         2 => '000-0000-0000',     ), ); ?> 【比較後の配列(例)】 $result //に結果を格納 この$resultの中身は、 array('佐藤五郎','サトウサブロウ','070-0000-0000'); のような感じです。

    • ベストアンサー
    • 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
  • 連想配列を処理するにあたって

    お世話になっております。 連想配列について質問させて頂きます。 以下のような、キーに文字列、インデックスに数字を指定している連想配列があるとします。 Array([あいうえお] => 0 [かきくけこ] => 0 [さしすせそ] => 0 [たちつてと] => 0) この連想配列のキーを指定し、そのキーに対するインデックスの数字を別の数字に置換したく思っています。 仮に、「あいうえお」のキーを指定して、そのキーに対するインデックス「0」を「1」に変更したいのです。 array_fill()やarray_fill_keys()などの関数を調べて試してみましたができませんでした。確実にプログラムが間違っているとしか言いようがないのですが、どなたかアドバイスをお願い致します。 以下のコード中にその処理を持ってきたく思っています。 /* foreach($mystery_noun as $mystery_key => $mystery_value){ __foreach($mecab_noun as $mecab_key => $mecab_value){ ____if($mystery_key == $mecab_key){ ______ここにその質問の処理を記述する。 ____} __} } */ ある連想配列のキー(文字列)が一致した場合、そのキーに対するインデックスを0→1に変更します。 尚、$mystery_noun、$mecab_nounの連想配列全てのインデックスには、それぞれ1,0が格納されています。

    • ベストアンサー
    • PHP
  • 「要素数が変動する連想配列」に、新たなキーを指定した上で、配列を追加し

    「要素数が変動する連想配列」に、新たなキーを指定した上で、配列を追加したいのですが、 どうすればよいでしょうか? 元の連想配列$hash1 "ヨーロッパ"=>"スペイン", "南米"=>"ブラジル" 追加したい配列$hash2 [0]=>"東京", [1]=>"名古屋" array_pushしたら、下記のようになりました。 "ヨーロッパ"=>"スペイン", "南米"=>"ブラジル" [0]=> ______[0]=>"東京" ______[1]=>"名古屋" これを、下記のようにするには、どうしたらよいでしょうか? "ヨーロッパ"=>"スペイン", "南米"=>"ブラジル", "アジア"=> ______[0]=>"東京", ______[1]=>"名古屋"

    • ベストアンサー
    • PHP
  • 連想配列からの値の取り出し

    お世話様です。 タイトルにもありますが連想配列を作成した後(以下に記述例)に その配列からキーを指定して値を取得したいと思っております。 array_keys関数だと値を指定してキーを取得するみたいで うまくいきませんでした。 何かよい方法ありませんでしょうか? //配列に格納 while (条件) {   $aParaOra += array((キー) => (値)); }

    • ベストアンサー
    • PHP
  • 連想配列の文字コードを変換

    あるクラスから渡された連想配列値の文字コードはUTF-8です。 連想配列に格納されている値の文字コードをSJISに変換したいのですが、単に md_convert_encoding($array_values,'sjis','auto') ではうまくできません。 どうすれば変更できるのでしょうか?

    • ベストアンサー
    • PHP
  • 多次元配列への格納

    よろしくお願いします。 多次元配列に値を格納したいのですが、これまでは、 $test = array ( 'father' => array ('hiroshi', 'toshi'), 'mother' => array ('hanako', 'yoshiko'), ); のように予め書かれてあるデータを使ってきましたが、この度やりたいのはある一つの通常の配列を20ずつ多次元配列に自動的に格納するスクリプトを作りたいと思っています。 $test = array ('hiroshi','toshi','masao',.....);と続く配列を、 $test = array ( 0 => array ('hiroshi',......(20個)), 1 => array (.......), ); と20ぐらいに区切って多次元配列にしたいです。 $test[0]に直接pushしたらWarning: array_push() [function.array-push]: First argument should be an array in..と叱られてしまいました。 どなたかわかる方がいましたらおしえてください。

    • ベストアンサー
    • PHP