22

次のような配列があります。

 Array ( [2.5] => ABDE [4.8] => Some other value ) 

キーがパターンに一致するキーと値のペアを見つけるにはどうすればよいですか? キーの最初の数字の値はわかりますが、2 番目の数字はわかりません。たとえば、「2.」のプレフィックスを使用して、キー「2.5」を見つけて、キーと値「ABDE」の両方を返すことができるようにしたいと考えています。

次のようなパターンで正規表現を使用することを考えていました。

$prefix = 2;
$pattern = '/'.$prefix.'\.\d/i';

次に、配列をループして各キーをチェックします。(ちなみに、デモ用に $prefix は 2 にハードコードされていますが、実際のシステムでは、これはユーザーの入力によって提供される値です)。

これを行う簡単な方法があるかどうか疑問に思っていますか?

ありがとう。

4

7 に答える 7

58

次のようなものが必要だと思います:

$keys = array_keys($array);
$result = preg_grep($pattern, $keys);

結果は、正規表現に一致するすべてのキーを保持する配列になります。キーを使用して、対応する値を取得できます。

preg_grep関数を見てください。

于 2012-09-18T18:04:55.083 に答える
18

配列をループしてキーを確認するだけです

$array = array(...your values...);

foreach($array as $key => $value) {
    if (preg_match($pattern,$key)){
        // it matches
    }
}

関数でラップして、パターンをパラメーターとして渡すことができます

于 2012-09-18T17:59:16.513 に答える
13

古い質問ですが、私がやりたいことは次のとおりです。

$array = [ '2.5' => 'ABDE', '4.8' => 'Some other value' ];

preg_grep+array_keysすべてのキーを検索します

$keys = preg_grep( '/^2\.\d/i', array_keys( $array ) );

パターンに一致する配列のスライスを追加array_intersect_keyして抽出することができますarray_flip

$vals = array_intersect_key( $array, array_flip( preg_grep( '/^2\.\d/i', array_keys( $array ) ) ) );
于 2015-07-16T15:02:42.960 に答える
1

同じ問題に遭遇する将来のプログラマー向け。これは、ループを使用しないより完全なソリューションです。

    $array = ['2.5'=> 'ABCDE', '2.9'=>'QWERTY'];
    $keys = array_keys($array);
    $matchingKeys = preg_grep('/^2\.+/', $keys);
    $filteredArray = array_intersect_key($array, array_flip($matchingKeys));
    print_r($filteredArray);
于 2019-06-03T13:14:34.003 に答える
1

それが私のやり方です

$data = ["path"=>"folder","filename"=>"folder/file.txt","required"=>false];

// FIRST WAY

$keys = array_keys($data);
if (!in_array("path", $keys) && !in_array("filename",$keys) && !in_array("required",$keys)) {
    return myReturn(false, "Dados pendentes");
}

// SECOND WAY

$keys = implode("," array_keys($data));
if (!preg_match('/(path)|(filename)|(required)/'), $keys) {
    return myReturn(false, "Dados pendentes");
}
于 2017-11-16T15:52:05.420 に答える