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 — Retourne un tableau avec les résultats de la recherche
Description
preg_grep() retourne un tableau qui contient les éléments de input qui satisfont le masque pattern.
Liste de paramètres
- pattern
-
Le motif à chercher, sous la forme d'une chaîne de caractères.
- input
-
Le tableau d'entrée.
- flags
-
Si cette option vaut PREG_GREP_INVERT, cette fonction retourne les éléments du tableau input qui ne correspondent pas au motif pattern.
Valeurs de retour
Retourne un tableau indexé, en utilisant les clés du tableau input d'entrée.
Historique
| Version | Description |
|---|---|
| 4.2.0 | Le paramètre flags a été ajouté. |
| 4.0.4 |
Depuis cette version, le tableau retourné est indexé en utilisant les clés issues du tableau input. Pour obtenir l'ancien comportement, utilisez la fonction array_values() sur le tableau retourné afin de réindexer les valeurs. |
Exemples
Exemple #1 Exemple avec preg_grep()
<?php
// Recherche les nombres à virgule flottante dans le tableau
$fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);
?>
Voir aussi
- Les Patterns PCRE
- preg_match_all() - Expression rationnelle globale
- preg_filter() - Recherche et remplace avec une expression rationnelle
- preg_last_error() - Retourne le code erreur de la dernière expression PCRE exécutée
<?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
