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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

4回答

5504閲覧

PHPの配列で「子」の値から親のキーを見つけたい

ozaki566

総合スコア29

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/02/14 10:45

お世話になります。初歩的な質問で申し訳御座いません。
入力したキーワードを元に、配列にした都道府県の番号を取得するプログラムを書いているのですがつまずいています。

例えばユーザーが「北海道」と入力したとき、事前に配列に入れた北海道の都道府県番号「1」を取得するために下記のように書き問題なく動作しています。

$keyword = "北海道";//例 $pref = array(1=>'北海道',2=>'青森',3=>'岩手',4=>'宮城'・・・・ $prefno = array_search($keyword, $pref);

しかし検索の揺れを考慮して「北海道」以外に「札幌」「苫小牧」「函館」等のキーワードでも$prefnoで「1」を表示させたいのですが、子の配列を作り,foreach等を使ってすべて展開するしか方法はないでしょうか?

【希望する動作】
'北海道','札幌','苫小牧'いずれのキーワードでも$prefに「1」を返したい

$pref = array(1=>('北海道','札幌','苫小牧'),2=>'青森',3=>'岩手',4=>'宮城・・・

今後キーワードなどを一層増やしていくとメモリ等に余計な不可を掛けるのではと思い、実装前に質問をさせて頂きました。

また現在完全一致のみヒットするようにしており、「福」と入力しても「福島」「福井」「福岡」は当然ヒットしないのですが、配列を

$pref = array(a=>'福井県',b=>'福島県',c=>'福岡県')

とした場合「福」ではどれにもヒットさせず「福井」では「$pref = a」を返すような正規表現は可能でしょうか?

宜しくお願い致します。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

どうしてもPHPでやらなくてはいけなくて、データの量に走査速度を影響させたくないなら
私ならキーと値を逆転させて保持させます。

php

1$keyword = "北海道";//例 2$pref = array('北海道' => 1,'札幌' => 1,'苫小牧' => 1 ,'青森' => 2 ...); 3$prefno = isset($pref[$keyword]) ? $pref[$keyword] : false;

php

1$pref[$keyword]

というように、添字でのアクセスであれば、配列の要素数に走査時間が影響されないためです。
ただし、このやりかたですと北海道、札幌、苫小牧の間の上下関係は表現できなくなります。
また、正規表現での走査もこの方法ですと出来なくなります。

参考:配列の要素確認と実行速度 アシアルブログ

投稿2016/02/16 12:27

KatsujiSato

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もしそのような要望をお客さんから出されたら、私ならデータは配列で持たずにDBに格納しますし、検索はSQLに任せる。そういう設計をします。

配列でデータを持つというアプローチはしません。

投稿2016/02/14 11:40

編集2016/02/14 14:04
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

メンテナンス性は非常に悪いですが、ちょっと思いついたのでw

php

1<?php 2$test_arr = ['北海道', '青森', '福島']; 3$prefecture = '北海道札幌苫小牧青森岩手宮城福井福島福岡'; 4 5foreach ($test_arr as $val) { 6 $result = mb_strpos($prefecture, $val); 7// echo $result.PHP_EOL; 8 echo select_pref($result); 9} 10 11function select_pref($result){ 12 if(0 <= $result && $result < 8)return '北海道'; 13 if(8 <= $result && $result < 10)return '青森'; 14 if(17 <= $result && $result < 19)return '福島'; 15}

ajax 等で入力補助するイメージなんですかねぇ。
入力文字2文字以上に反応させれば良いと思います。
都道府県の範囲では、2文字でユニークになります。

投稿2018/05/02 22:25

編集2018/05/02 22:27
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

どうしてもやりたければこういう感じ。でも多分キーワード転置のほうが正解だと思う。

php

1$pref = array(1=>['北海道','札幌','苫小牧'],2=>'青森',3=>'岩手'); 2$search = "苫小牧"; 3$fil = array_filter($pref, function($k) use($search){ 4 if(is_array($k)) { return array_search($search, $k) !== false;} 5 else {return $k == $search;} 6}); 7var_dump($fil);

福井県と福井については"/^".$prefname."[都道府県]/"とかですかね。

投稿2018/05/02 19:17

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問