質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.37%

PHPで_POSTの値を連想配列に一致していたらreturnへ返したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 880

shibainu

score 26

前提・実現したいこと

PHPで_POSTの値を連想配列から探し一致していたらreturnへ返したい
かれこれ4日くらい悩みましたがお手上げです。
どうかお知恵をお貸しください・・。
表題の通りなのですが、PHPで_POSTの値を連想配列に一致していたら、
$valを拾ってreturnに返したいです。
さらに、if文で分岐していますが、['addr11']に値がなければ['addr1']を見て情報があれば
値を返すという感じです。

$_POST['addr1']の値は、ajaxzip3のアレです。

フォームで都道府県を選んだら料金も出てくるイメージです。
イメージ通りになかなかいかないものですね・・。

発生している問題・エラーメッセージ

現在のコードですと、茨城県の300がフォームの結果に出ています。

該当のソースコード

function souryou($price){
    $todofuken = array(
        '北海道' => 1296,
        '青森県' => 972,
        '茨城県' => 300,
        );

    foreach ($todofuken as $key => $val){
        if(array_search($_POST['addr11'], $key) !== false){
            $souryou = "$val";
        }elseif (array_search($_POST['addr1'], $key) !== false) {
            $souryou = "$val";
        }
    }
    return $souryou;
}

試したこと

恐縮ですが、PHPを始めたばかりです。
PHPのサイトなどを見つつ読みつつしてみましたが、造詣に乏しいです。

補足情報(言語/FW/ツール等のバージョンなど)

より詳細な情報

$_POST['addr1']、$_POST['addr11']が出力する値です

AjaxZip3.PREFMAP = [
    null,       '北海道',   '青森県',   '岩手県',   '宮城県',
    '秋田県',   '山形県',   '福島県',   '茨城県',   '栃木県',
    '群馬県',   '埼玉県',   '千葉県',   '東京都',   '神奈川県',
    '新潟県',   '富山県',   '石川県',   '福井県',   '山梨県',
    '長野県',   '岐阜県',   '静岡県',   '愛知県',   '三重県',
    '滋賀県',   '京都府',   '大阪府',   '兵庫県',   '奈良県',
    '和歌山県', '鳥取県',   '島根県',   '岡山県',   '広島県',
    '山口県',   '徳島県',   '香川県',   '愛媛県',   '高知県',
    '福岡県',   '佐賀県',   '長崎県',   '熊本県',   '大分県',
    '宮崎県',   '鹿児島県', '沖縄県'
];
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2016/05/13 03:17

    「ajaxzip3のアレです」ではなくvar_dumpした値など具体的にお書きください。また、コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「</>」ボタンを押すとコードブロックになります。

    キャンセル

  • shibainu

    2016/05/13 03:31

    遅い時間ですが、回答ありがとうございます。
    コードはコードブロックを使用しました。ご指摘ありがとうございます。
    var_dumpも良くわかっておりません。
    ajaxzip3の郵便番号入力で住所が出てくるものなのですが、どのような情報があれば良いのでしょうか。

    キャンセル

  • kei344

    2016/05/13 04:09

    「POSTされたデータにどういうデータがどういう形で入っているか」の情報が必要です。また、var_dumpは変数の内容を出力する関数です。「PHP var_dump」で使い方を探してみてください。

    キャンセル

回答 1

checkベストアンサー

+1

質問内容に不明瞭なところは多々ありますが、想像で回答してみます。

if( isset($todofuken[$_POST['addr11']]) ){
    $souryou = $todofuken[$_POST['addr11']];
} else if( isset($todofuken[$_POST['addr1']]) ){
    $souryou = $todofuken[$_POST['addr1']];
} else {
    $souryou = 0;
}
return $souryou;

解説
$_POST['addr11']と$_POST['addr1']に都道府県名が入ってくると想定。
その都道府県名が連想配列$todofukenに見つかれば、'addr11'の方を優先して値を返却する。
見つからないときは0を返却。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/13 09:32

    情報不足の中回答いただきありがとうございます。
    頂いた内容で解決いたしました。本当にありがとうございます。
    foreachが必要なのだとばかり思っていました。
    頂いたコード、じっくり分析したいと思います。勉強になりました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る