根据部分字符串选择数组键

sea*_*987 32 php arrays string substring strpos

我有一个数组,在那个数组中我有一个看起来像show_me_160这样的数组键,这个数组键可能会改变一点,所以有时候页面可能会加载而数组键也许show_me_120,我想现在可以只是字符串匹配数组键直到最后一次,_以便我可以检查最后一个下划线后的值是多少?

oez*_*ezi 29

我能想到的一个解决方案:

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

  • 我考虑了这个问题,但是我怀疑它在大型阵列上会很慢。 (2认同)

Ian*_*Ian 18

我最近遇到了类似的问题.这就是我想出的:

$value = $my_array[current(preg_grep('/^show_me_/', array_keys($my_array)))];
Run Code Online (Sandbox Code Playgroud)


Geo*_*let 8

你必须迭代你的数组来分别检查每个键,因为你没有直接查询数组的可能性(我假设数组也包含完全不相关的键,但你可以跳过该if部分,如果那不是案件):

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

然而,这听起来像是一种非常奇怪的存储数据的方式,如果我是你,我会检查你的应用程序中是否存在传递数据的其他方式(更有效);)

  • 最好使用 `0 === strpos($k, 'show_me_')` 来确保只有前缀匹配,而像 `noshow_me_` 这样的值也不匹配 (2认同)

Mid*_*Ade 6

要在数组键中搜索某些字符串,您可以使用array_filter(); 查看文档

// 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);
Run Code Online (Sandbox Code Playgroud)

如果您在数组值中搜索,您可以使用标志 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
);
Run Code Online (Sandbox Code Playgroud)

或者

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

如果您在数组值和数组键中搜索,您可以使用标志 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
);
Run Code Online (Sandbox Code Playgroud)

如果您要搜索两者,则必须将 2 个参数传递给回调函数