【フォーム】確認画面の表示にarray_intersect()
フォームでの確認画面で、実際の値から表示用の項目を出す時に役立つメソッド。
array_intersect()
を使って、「セレクトボックスで選ばれたものだけ連想配列に変換する」というもの。わかりづらいけど見たら分かってもらえる…と思う。頑張って書いた。
事例
例えば好きな果物を聞くようなセレクトボックスがあったとする。
<select name="fruit[]"> <option value="orange">みかん</option> <option value="grape">ぶどう</option> <option value="apple">りんご</option> </select>
この時当然ユーザーが見ている「みかん」と実際の値「orange」は別に設定されることが多い。これはデータベースの関係やらいろいろある。
この後phpファイルにデータを送信し、このままデータベースに入れる場合はいい。が、その間に確認画面を挟むとき、一気にめんどくさくなる(というか僕のとこではいつもなっている)のである(ヽ’ω`)
fruit[]
のように角カッコがついたものの値は配列で送られる。1つめと3つめを選んだ場合はこういう具合。
array( 'orange' , 'apple' );
確認画面ではこれを保持しつつ、表示用に「みかん、りんご」と出さなければいけない。今まではこうやってた。
// 果物の対応配列 $fruits = array( 'みかん' => 'orange', 'ぶどう' => 'grape', 'りんご' => 'apple', ); $likes = $_POST['fruit']; $result = array(); // 2重のforeachで回して、一致したら配列に入れてbreak foreach( $like as $like ){ foreach( $fruits as $key => $val ){ if( (string)$like === (string)$val ){ $result[] = $key; break; } } } // $result = array( 'みかん' , 'りんご' );
これで欲しい表示用の値は取れるが、非効率で書くのも面倒く、スマートじゃない。どうするか。
続きを読む