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 — Devuelve entradas de matriz que coinciden con el patrón
Descripción
Devuelve la matriz consistente en los elementos de la matriz input que coinciden con pattern.
Parámetros
- pattern
-
El patrón de búsqueda, como cadena.
- input
-
La matriz de entrada.
- flags
-
Si se establece a PREG_GREP_INVERT, esta función devuelve los elementos de la matriz de entrada que no coinciden con pattern.
Valores devueltos
Devuelve una matriz indexada usando las claves de la matriz input.
Historial de cambios
| Versión | Descripción |
|---|---|
| 4.2.0 | Se añadió el parámetro flags. |
| 4.0.4 |
Antes de esta versión, la matriz devuelta era indexada sin tener en cuenta las claves de la matriz input. Si quiere reproducir este comportamiento anterior, use array_values() sobre la matriz devuelta para re-indexar los valores. |
Ejemplos
Example #1 Ejemplo de preg_grep()
<?php
// devuelve todos los elementos de la matriz
// que contienen números de coma (punto) flotante
$matriz_fl = preg_grep("/^(\d+)?\.\d+$/", $matriz);
?>
Ver también
- Patrones de PCRE
- preg_match_all() - Realiza una comparación global de una expresión regular
- preg_filter() - Realiza una búsqueda y sustitución de una expresión regular
- preg_last_error() - Devuelve el código de error de la última ejecución de expresión regular PCRE
<?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 ) );
}
?>
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
