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

时间:2010-10-14 09:59:50

标签: php arrays string substring strpos

我有一个数组,在那个数组中我有一个类似于show_me_160的数组键,这个数组键可能会稍微改变一下,所以有时候页面可能会加载而数组键可能会show_me_120,我想现在可以直接将数组键匹配到最后_,以便我可以检查最后一个下划线后的值是什么?

8 个答案:

答案 0 :(得分:28)

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

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

答案 1 :(得分:17)

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

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

答案 2 :(得分:7)

你必须迭代你的数组来分别检查每个键,因为你没有直接查询数组的可能性(我假设数组也包含完全不相关的键,但你可以跳过{{ 1}}如果不是这样的话,那就是:

if

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

答案 3 :(得分:4)

您还可以使用基于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 :(得分:1)

要在数组键中搜索某些字符串,可以使用array_filter(); see 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个参数传递给回调函数

答案 5 :(得分:0)

 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($例如)

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

的print_r(计数($示例))

2 

的print_r($示例[1])

 120 

答案 6 :(得分:0)

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

返回数组'searched_key'=>'分配给键的值'

答案 7 :(得分:0)

我最近遇到了类似的挑战,我需要扫描大型多维数组以查找具有特定前缀的键,因此创建了两个函数,以递归方式搜索区分大小写和不区分大小写的键。

我将它们放在下面链接的Github上,希望它们能帮助其他尝试做同样事情的人!

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

相关问题