Tell me more ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

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!

share|improve this question

3 Answers

up vote 10 down vote accepted

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)
share|improve this answer
that's an interesting way of doing, I'm going ot try it right now ! thanks a lot for your time – Bacon Mar 18 '10 at 16:10
instead of flipping you can use array_keys() – zerkms Mar 18 '10 at 16:53
@zerkms: Thats perfect. Thanks :) – codaddict Mar 18 '10 at 16:55

there is no such function out of the box. you have to implement it with yourself.

share|improve this answer

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];
share|improve this answer
or just if(preg_match(...)) in the case of multiple result occurencies. – zerkms Mar 18 '10 at 15:41
@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 – Andrew Moore Mar 18 '10 at 15:44
ah, my bad, sorry – zerkms Mar 18 '10 at 16:06

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.