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