PHP 配列 値の存在チェック
ある値が検索される配列に存在チェックする際に、in_array関数を使います。
上手くin_array関数を使えば、ソースの可読性や開発効率をアップさせるかと思います。
いやいや、そんなに変わらないと思うよと言った人がいると思いますが、人によって違いますが、私にとっては、読みやすく、メンテナンスしやすく、シンプルなソースを実装したほうが良いではないかと思います。
■文法
in_array( ‘ある値’, ‘検索される配列’ [, オプション: 型でも確認するかどうか] );
■返り値
検索される配列からある値を見つけたら、true、見つけなかったら、falseを返します。
■例1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php $category_id = "1"; // ある値 $category_list = array("1", "2", "3", "4", "5"); // 検索される配列 $err_msg = ""; // ある値は検索される配列に存在していない場合 if( !in_array($category_id, $category_list) ){ $err_msg = "カテゴリーを選択してください"; // 何かの処理を行う、ここでは、エラーメッセージを設定する } echo $err_msg; // $category_idに1~5以外の値を設定した場合、「カテゴリーを選択してください」エラーメッセージを出力する ?> |
PHPって簡単ですね。あのJAVAより楽ちん~♪♪(JAVAなら、ListやMapなどのオブジェクトのメソッドを使うね)
前説のところに、上手くin_array関数を使えば、ソースの可読性や開発効率をアップさせることを例を挙げて、説明します。
■例2:悪い例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php $current_url = 'domain/foo'; //任意値 $index_url = 'domain/index'; $login_url = 'domain/login'; $pwdchg_url = 'domain/pwdchg'; $pwdcnf_url = 'domain/confirm'; if ( $current_url != $index_url && $current_url != $login_url && $current_url != $pwdchg_url && $current_url != $pwdcnf_url){ // 認証処理を行う echo "認証処理を行う"; } ?> |
上記の例は実際のWEBサイトに実装したたソースの抜粋です。(書き方はまったく同じです)
対象画面を表示する前に、対象画面はログイン画面やパスワード再発行画面など以外の場合、認証処理を行うという仕様の実装です。
ソース自体には何も問題ないですし、実際にも本番環境で正常に稼働していますが、もっと読みやすく、カッコ良く、コーディングの効率高い実装方法があると思います。
■例3:改善策
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php $current_url = 'domain/foo'; //任意値 $exclusion_url_list = array( 'domain/index', 'domain/login', 'domain/pwdchg', 'domain/confirm', // 今後、除外URLを追加する場合があるかと思いますので、後ろの「,」を入れよう ); if ( !in_array($current_url, $exclusion_url_list) ){ // 認証処理を行う echo "認証処理を行う"; } ?> |
いかがでしょうか、in_array関数を使ったら、コーディング量も減っていたし、ソースの可読性も大幅にアップしたと思います。(もっといい実装方法があれば、是非是非コメントください)
実装者に聞いたところ、最初はログイン画面だけ除外対象となりますが、除外対象画面がどんどん追加されたため、例2のカタチになってしまいましたという理由でしたが。。。。