Run a match on the array's keys rather than the values:
<?php
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;
}
?>
preg_grep
(PHP 4, PHP 5)
preg_grep — 패턴 매치한 부분의 배열을 반환
설명
array preg_grep
( string $pattern
, array $input
[, int $flags
] )
input 배열에서 주어진 pattern에 매치한 원소를 포함하는 배열을 반환합니다.
인수
- pattern
-
검색할 패턴 문자열.
- input
-
입력 배열.
- flags
-
PREG_GREP_INVERT를 설정하면, 입력 배열에서 주어진 pattern에 매치하지 않는 원소를 반환합니다.
반환값
input 배열의 키를 사용한 배열을 반환합니다.
변경점
| 버전 | 설명 |
|---|---|
| 4.2.0 | flags 인수 추가. |
| 4.0.4 |
이 버전 이전에는, 반환하는 배열의 키가 input 배열과 관련이 없었습니다. 예전 동작을 실행하려면, 반환된 배열에 array_values()를 사용하여 값을 다시 정렬하십시오. |
예제
Example #1 preg_grep() 예제
<?php
// 부동소수점 수를 포함하는
// 모든 배열 원소를 반환합니다
$fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);
?>
keithbluhm at gmail dot com
21-Jan-2010 03:56
pete dakin at aargh dot doh!
20-Nov-2008 07:24
<?php
/**
* Return the element key for a found pattern in an array
*
* @param String pattern
* @param Array input
* @return mixed
*/
function preg_array_key( $sPattern, $aInput ){
return key( preg_grep( $sPattern, $aInput ) );
}
?>
brian at cristina dot org
02-Sep-2008 01:31
I don't see it mentioned here but you can invert your match to only return array entries where the search values IS NOT found. The format for it is...
<?php
$nomatch = preg_grep("/{$keyword}/i",$array,PREG_GREP_INVERT);
?>
Notice the PREG_GREP_INVERT.
That will result in an array ($nomatch) that contains all entries of $array where $keyword IS NOT found.
Hope that helps!
-b
