I have an array and in that array I have an array key that looks like, show_me_160
this array key may change a little, so sometimes the page may load and the array key maybe show_me_120
, I want to now is possible to just string match the array key up until the last _
so that I can check what the value is after the last underscore?
-
Can you give an example? – Gumbo Oct 14 '10 at 10:02
-
1use array_map and a callback function to preg_metch for `#show_me_([\d])+#` – Hannes Oct 14 '10 at 10:07
-
I have voted to close this question as Unclear. There is no sample array, no desired output, no coding attempt, no clear explanation of what is being done with the trailing portion of the qualifying key. I don't know if multiple keys may qualify. We simply don't have a [mcve] here. – mickmackusa Jan 16 '22 at 06:22
7 Answers
one solution i can think of:
foreach($myarray as $key=>$value){
if("show_me_" == substr($key,0,8)){
$number = substr($key,strrpos($key,'_'));
// do whatever you need to with $number...
}
}

- 51,017
- 10
- 98
- 115
-
4I considered this for what I'm working on but I suspect it'd be painfully slow on huge arrays. – GordonM Feb 27 '18 at 12:44
I ran into a similar problem recently. This is what I came up with:
$value = $my_array[current(preg_grep('/^show_me_/', array_keys($my_array)))];

- 602
- 8
- 12
you would have to iterate over your array to check each key separately, since you don't have the possibility to query the array directly (I'm assuming the array also holds totally unrelated keys, but you can skip the if
part if that's not the case):
foreach($array as $k => $v)
{
if (strpos($k, 'show_me_') !== false)
{
$number = substr($k, strrpos($k, '_'));
}
}
However, this sounds like a very strange way of storing data, and if I were you, I'd check if there's not an other way (more efficient) of passing data around in your application ;)

- 4,047
- 2
- 21
- 17
-
This works for me in my situation, though note that this line: `if (strpos($k, 'show_me_') !== false)` should be `if (strpos($v, 'show_me_') !== false)` – freestate May 06 '15 at 08:51
-
1It would be more desirable to use `0 === strpos($k, 'show_me_')` to ensure it is only the prefix that matches and values like `noshow_me_` do not also match – Will B. May 25 '18 at 14:36
to search for certain string in array keys you can use 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);
if you search in the array values you can use the flag 0 or leave the flag empty
$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
);
or
$foo = array_filter(
// the array you wanna search in
$array,
// callback function to search for certain sting
function ($value){
return(strpos($value,'value') !== false);
}
);
if you search in the array values and array keys you can use the flag 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
);
in case you'll search for both you have to pass 2 arguments to the callback function

- 162
- 1
- 9
-
What If I want to return the string value at the end of this logic? Because currently this is returning the key and the value within one array – DarkteK Jul 28 '20 at 15:05
You can also use a preg_match
based solution:
foreach($array as $str) {
if(preg_match('/^show_me_(\d+)$/',$str,$m)) {
echo "Array element ",$str," matched and number = ",$m[1],"\n";
}
}

- 445,704
- 82
- 492
- 529
filter_array($array,function ($var){return(strpos($var,'searched_word')!==FALSE);},);
return array 'searched_key' => 'value assigned to the key'

- 19
- 6
-
2An unformatted blob of code with no context is usually not a good answer here. Maybe [edit] the Answer and make it clear what you are suggesting and why you think it answers the Question. – Dec 17 '18 at 18:13
-
How the developer will know these two variables: 'searched_key' & 'value assigned to the key' ?? Also this response is not well formatted – DarkteK Jul 28 '20 at 15:02
foreach($myarray as $key=>$value)
if(count(explode('show_me_',$event_key)) > 1){
//if array key contains show_me_
}
More information (example):
if array key contain '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

- 1,339
- 1
- 19
- 25
-
-
if array key contain 'show_me_' $example = explode('show_me_','show_me_120'); $example is: Array ( [0] => [1] => 120 ) count($example) is: **2** $example[1] is: **120** – devugur Jul 13 '16 at 11:07
-
Why do you need two functions (explode and count), if you can use substring or strpos? – Vinicius Monteiro Nov 24 '16 at 15:55