seseragiseven

【フォーム】確認画面の表示に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( 'みかん' , 'りんご' );

これで欲しい表示用の値は取れるが、非効率で書くのも面倒く、スマートじゃない。どうするか。
続きを読む

カテゴリー

人気の記事