24

Is it possible to use a regular expression with the php function array_key_exists()?

For example:

$exp = "my regex";  
array_key_exists($exp, $array);

Thank you!

2 Answers 2

38

You can extract the array keys using array_keys() and then use preg_grep() on that array:

function preg_array_key_exists($pattern, $array) {
    $keys = array_keys($array);    
    return (int) preg_grep($pattern,$keys);
}

.

$arr = array("abc"=>12,"dec"=>34,"fgh"=>56);

var_dump(preg_array_key_exists('/c$/',$arr)); // check if a key ends in 'c'.
var_dump(preg_array_key_exists('/x$/',$arr)); // check if a key ends in 'x'.

function preg_array_key_exists($pattern, $array) {
    // extract the keys.
    $keys = array_keys($array);    

    // convert the preg_grep() returned array to int..and return.
    // the ret value of preg_grep() will be an array of values
    // that match the pattern.
    return (int) preg_grep($pattern,$keys);
}

Output:

$php a.php
int(1)
int(0)
Sign up to request clarification or add additional context in comments.

1 Comment

instead of flipping you can use array_keys()
3

No, I'm afraid not. You can iterate the array keys and perform matches on those:

$keys = array_keys($array);
foreach ($keys as $key)
  if (preg_match($exp, $key) == 1)
    return $array[$key];

2 Comments

or just if(preg_match(...)) in the case of multiple result occurencies.
@zerkms: preg_match() only matches the first occurrence of the pattern. Therefore it can only return 0 or 1. Please see php.net/preg_match

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.