我有一个数组,其中有一个数组键,看起来像show_me_160
,这个数组键可能会稍微改变,所以有时页面加载时,数组键可能是show_me_120
,现在我想知道是否可能只匹配数组键直到最后一个_
,以便我可以检查最后一个下划线后面的值?
我能想到一种解决方案:
foreach($myarray as $key=>$value){
if("show_me_" == substr($key,0,8)){
$number = substr($key,strrpos($key,'_'));
// do whatever you need to with $number...
}
}
我最近也遇到了类似的问题。这是我的解决方案:
$value = $my_array[current(preg_grep('/^show_me_/', array_keys($my_array)))];
如果您没有直接查询数组的可能性(我假设数组还包含完全不相关的键,但如果不是这种情况,可以跳过 if
部分),则必须迭代数组以单独检查每个键:
foreach($array as $k => $v)
{
if (strpos($k, 'show_me_') !== false)
{
$number = substr($k, strrpos($k, '_'));
}
}
然而,这听起来像是一种非常奇怪的存储数据的方式,如果我是你,我会检查是否有另一种(更高效)的方法在应用程序中传递数据。 ;)
if (strpos($k, 'show_me_') !== false)
应该是 if (strpos($v, 'show_me_') !== false)
。 - freestate0 === strpos($k, 'show_me_')
来确保只有前缀匹配,而像 noshow_me_
这样的值不会匹配。 - Will B.要在数组键中搜索特定字符串,可以使用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);
如果你要在数组中搜索值,可以使用标志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
);
如果您想同时搜索两者,则需要向回调函数传递两个参数。
preg_match
的解决方案:foreach($array as $str) {
if(preg_match('/^show_me_(\d+)$/',$str,$m)) {
echo "Array element ",$str," matched and number = ",$m[1],"\n";
}
}
\K
来避免捕获组。 - mickmackusafilter_array($array, function ($var){return(strpos($var,'searched_word')!==FALSE);},);
返回数组 'searched_key' => '分配给键的值'
foreach($myarray as $key=>$value)
if(count(explode('show_me_',$event_key)) > 1){
//if array key contains show_me_
}
Array ( [0] => [1] => 120 )
打印(count($example))
2
print_r($example[1])
120
array_map
和回调函数来对preg_match
进行匹配#show_me_([\d])+#
。 - Hannes