web-dev-qa-db-ja.com

部分的な文字列に基づいて配列キーを選択する

配列があり、その配列に次のような配列キーがあります。show_me_160この配列キーは少し変わる場合があるため、ページが読み込まれ、配列キーがshow_me_120になる可能性があります。最後の_までの配列キーを使用して、最後のアンダースコアの後の値を確認できますか?

33
sea_1987

私が考えることができる1つの解決策:

foreach($myarray as $key=>$value){
  if("show_me_" == substr($key,0,8)){
    $number = substr($key,strrpos($key,'_'));
    // do whatever you need to with $number...
  }
}
28
oezi

最近、似たような問題に遭遇しました。これは私が思いついたものです:

$value = $my_array[current(preg_grep('/^show_me_/', array_keys($my_array)))];
18
Ian

配列を直接クエリする可能性がないため、配列を反復処理して各キーを個別にチェックする必要があります(配列にはまったく関連のないキーも保持されていると想定していますが、ifそうでない場合は一部):

foreach($array as $k => $v)
{
  if (strpos($k, 'show_me_') !== false)
  {
    $number = substr($k, strrpos($k, '_'));
  }
}

しかし、これはデータを保存する非常に奇妙な方法のように聞こえます。私があなたなら、アプリケーションでデータを渡す他の方法(より効率的)がないかどうかを確認します;)

8

preg_matchベースのソリューションを使用することもできます。

foreach($array as $str) {
        if(preg_match('/^show_me_(\d+)$/',$str,$m)) {
                echo "Array element ",$str," matched and number = ",$m[1],"\n";
        }
}
4
codaddict

配列キーで特定の文字列を検索するには、array_filter();docsを参照 を使用できます

// the array you'll search in
$array = ["search_1"=>"value1","search_2"=>"value2","not_search"=>"value3"];
// filter the array and assign the returned array to variable
$foo = array_filter(
    // the array you wanna search in
    $array, 
    // callback function to search for certain sting
    function ($key){ 
        return(strpos($key,'search_') !== false);
    }, 
    // flag to let the array_filter(); know that you deal with array keys
    ARRAY_FILTER_USE_KEY
);
// print out the returned array
print_r($foo);

配列の値を検索する場合は、フラグ0を使用するか、フラグを空のままにすることができます

$foo = array_filter(
    // the array you wanna search in
    $array, 
    // callback function to search for certain sting
    function ($value){ 
        return(strpos($value,'value') !== false);
    }, 
    // flag to let the array_filter(); know that you deal with array value
    0
);

または

$foo = array_filter(
    // the array you wanna search in
    $array, 
    // callback function to search for certain sting
    function ($value){ 
        return(strpos($value,'value') !== false);
    }
);

配列の値と配列のキーを検索する場合は、ARRAY_FILTER_USE_BOTHフラグを使用できます。

$foo = array_filter(
    // the array you wanna search in
    $array, 
    // callback function to search for certain sting
    function ($value, $key){ 
        return(strpos($key,'search_') !== false or strpos($value,'value') !== false);
    },
    ARRAY_FILTER_USE_BOTH
);

両方を検索する場合は、コールバック関数に2つの引数を渡す必要があります

2
MidAde
 foreach($myarray as $key=>$value)
    if(count(explode('show_me_',$event_key)) > 1){
         //if array key contains show_me_
    }

詳細情報(例):

配列キーに「show_me_」が含まれている場合

$ example = explode( 'show_me _'、 'show_me_120');

print_r($ example)

Array ( [0] => [1] => 120 ) 

print_r(count($ example))

2 

print_r($ example [1])

 120 
0
user5510975

私は最近、同様の課題に直面しました。特定のプレフィックスを持つキーを探すために大きな多次元配列をスキャンする必要があるため、大文字と小文字を区別するキーと区別しないキーの両方を再帰的に検索する関数をいくつか作成しました。

これらが他の誰かが同じことをしようとするのを助けることを願って、以下のリンクでGithubにこれらを載せました!

https://Gist.github.com/aran112000/c77a8d8f4c41af6f5800b485caf94fa9

0
Aran

filter_array($ array、function($ var){return(strpos($ var、 'searched_Word')!== FALSE);}、);

配列 'searched_key' => 'キーに割り当てられた値'を返します

0
qdras