Req #63818 [Com]: Need option to search in array keys instead of values

From: Date: Thu, 14 Mar 2013 22:52:11 +0000
Subject: Req #63818 [Com]: Need option to search in array keys instead of values
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-177796@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=63818&edit=1

 ID:                 63818
 Comment by:         danielklein at airpost dot net
 Reported by:        dkadosh at affinegy dot com
 Summary:            Need option to search in array keys instead of
                     values
 Status:             Open
 Type:               Feature/Change Request
 Package:            PCRE related
 Operating System:   any
 PHP Version:        5.3.20
 Block user comment: N
 Private report:     N

 New Comment:

How about this?

<?php
function preg_grep_keys($pattern, $input, $flags = 0) {
    return array_intersect_key($input, array_flip(preg_grep($pattern, array_keys($input), $flags)));
}
?>


Previous Comments:
------------------------------------------------------------------------
[2012-12-20 17:06:30] dkadosh at affinegy dot com

Description:
------------
---
From manual page: http://www.php.net/function.preg-grep
---
I'm asking for an extra flag to this function, to cause it to do its search in the array keys
rather than in the values.

While there's a comment in the above page of how to "post-process" preg_grep()
results to achieve this, I'd rather it be done in C (inside the PCRE code) than PHP for
performance reasons.

I thought about something like this:
$a = array_flip( preg_grep('/Version$/', array_flip($aParams)) );

which would almost return what I want, HOWEVER it has two problems:
1) If certain values of $aParams are duplicated, the first array_flip() will "lose" those
rows in the array.
2) I'd incur a sizeable CPU and memory hit by calling array_flip, which duplicates the array(s)
in RAM.


Test script:
---------------
The current work-around:

function preg_grep_keys( $pattern, $input, $flags = 0 )
{
    $keys = preg_grep( $pattern, array_keys( $input ), $flags );
    $vals = array();
    foreach ( $keys as $key )
    {
        $vals[$key] = $input[$key];
    }
    return $vals;
}




------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=63818&edit=1


Thread (4 messages)

« previous php.bugs (#177796) next »