私は次のような配列を持っています
array(
"v"=>1,
"u"=>8,
"v1"=>45,
"v123"=>12
);
私のプログラムでは、キーがvで始まり、その後に数字が続く要素が配列に含まれているかどうかを確認する必要があります。配列が非常に大きいため、反復を好みません。これを行う他の効率的な方法はありますか。 isset(arr [regex]);
私は次のような配列を持っています
array(
"v"=>1,
"u"=>8,
"v1"=>45,
"v123"=>12
);
私のプログラムでは、キーがvで始まり、その後に数字が続く要素が配列に含まれているかどうかを確認する必要があります。配列が非常に大きいため、反復を好みません。これを行う他の効率的な方法はありますか。 isset(arr [regex]);
うまくいくかもしれない汚いハックは次のようになります:
array_keys()
すべてのキーを取得するために使用します$data = array(
"v" =>1,
"u" =>8,
"v1" =>45,
"v123" =>12
);
$keys = array_keys($data);
$key_string = implode(',', $keys);
$matches = array();
preg_match('/^v[0-9]{0,}$/', $key_string, $matches);
または、短縮
$matches = array();
preg_match('/^v[0-9]{0,}$/', implode(',', array_keys($data)), $matches);
array_keys
&を使用することでどれだけのパフォーマンスヒットが得られるかはわかりませんが、うまくいくimplode
はずです。
array_filter(http://php.net/manual/en/function.array-filter.php)を使用できます
最初にコールバック関数を作成します。
function getKeys($n){
return preg_match('/^v[0-9]+$/', $n);
}
次に、array_filterを実行します。
$arr = array(
"v"=>1,
"u"=>8,
"v1"=>45,
"v123"=>12
);
$newArr = array_filter(array_keys($arr), "getKeys");
正しいarray_keysで結果を見ることができます:
print_r($newArr);
結果が得られた場合、このステートメントは真である必要があります。
echo count($newArr) > 0;