やりたいこと:配列にある特定なキーを割り出して値を取得します
- 以下の配列を例とします
$a = array( "key_0" => "val 0", "key_1" => "val one", "key_2" => "val two", "key_3" => "val three", "key_4" => "val four", "key_5" => "val five", "key_6" => "val six" );
- "kei_3"から"key_5"までの値を取得したいです
簡単な方法:ループ(例:foreach文)で配列キーに合うものをすべて取得します
- シンプルな方法ではループ(例:foreach)で"kei_3"、"kei_4"、"kei_5"に合う値を取得します
$a = array( "key_0" => "val 0", "key_1" => "val one", "key_2" => "val two", "key_3" => "val three", "key_4" => "val four", "key_5" => "val five", "key_6" => "val six" ); $out_arr = array(); foreach($a as $k =>$var ) { if( $k == "key_3" || $k == "key_4" || $k == "key_5" ) { $out_arr[$k] = $var ; }
- もし、特定なキーが多い、また入力配列が多きい場合、この方法では不効率になります
正規表現で特定なキーをマッチングして、値を取得します
- PHPの関数: array_filterを利用します
$a = array( "key_0" => "val 0", "key_1" => "val one", "key_2" => "val two", "key_3" => "val three", "key_4" => "val four", "key_5" => "val five", "key_6" => "val six" ); $array_keys = array_keys($a); $matched_keys = array_filter( $array_keys, function($k){ return preg_match( "/key_[2-4]/u" , $k) ;} ); foreach($matched_keys as $key){ echo $a[$key]."\n" ; }
-
array_filter関数の2番目の引数がコールバック関数なので、このコールバック関数に正規表現で特定なキーのマッチングを行っています