-1

私は次のような配列を持っています

array(
    "v"=>1,
    "u"=>8,
    "v1"=>45,
    "v123"=>12
);

私のプログラムでは、キーがvで始まり、その後に数字が続く要素が配列に含まれているかどうかを確認する必要があります。配列が非常に大きいため、反復を好みません。これを行う他の効率的な方法はありますか。 isset(arr [regex]);

4

2 に答える 2

2

うまくいくかもしれない汚いハックは次のようになります:

  1. array_keys()すべてのキーを取得するために使用します
  2. 結果の配列キーを実装します
  3. 結果の文字列に対して正規表現を実行します。
$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はずです。

于 2012-08-02T14:27:36.687 に答える
1

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;
于 2012-08-02T14:37:49.110 に答える