@Dave un extrait de code mis à jour de http://www.php.net/manual/en/function.strpos.php#107351
function strposa($haystack, $needles=array(), $offset=0) {
$chr = array();
foreach($needles as $needle) {
$res = strpos($haystack, $needle, $offset);
if ($res !== false) $chr[$needle] = $res;
}
if(empty($chr)) return false;
return min($chr);
}
Comment utiliser:
$string = 'Whis string contains word "cheese" and "tea".';
$array = array('burger', 'melon', 'cheese', 'milk');
if (strposa($string, $array, 1)) {
echo 'true';
} else {
echo 'false';
}
reviendra true
, à cause de array
"cheese"
.
Mise à jour: code amélioré avec arrêt lorsque la première des aiguilles est trouvée:
function strposa($haystack, $needle, $offset=0) {
if(!is_array($needle)) $needle = array($needle);
foreach($needle as $query) {
if(strpos($haystack, $query, $offset) !== false) return true; // stop on first true result
}
return false;
}
$string = 'Whis string contains word "cheese" and "tea".';
$array = array('burger', 'melon', 'cheese', 'milk');
var_dump(strposa($string, $array)); // will return true, since "cheese" has been found
strposa
parcourra tout le texte, mais ce n'est pas nécessaire! Suis-je compréhensible?foreach($needle as $k => $query) { if(strpos($haystack, $query, $offset) !== false) return $k; }
, il renvoie donc la clé de l'élément correspondant pour une manipulation ultérieure.str_replace est considérablement plus rapide.
la source
Le code ci-dessous montre non seulement comment le faire, mais le met également dans une fonction facile à utiliser pour aller de l'avant. Il a été écrit par "jesda". (Je l'ai trouvé en ligne)
Code PHP:
Usage:
la source
Vous pouvez parcourir le tableau et définir une valeur "flag" si
strpos
retournefalse
.Vérifiez ensuite la valeur de
$flag
.la source
!== flase
?Si vous voulez juste vérifier si certains caractères sont réellement dans la chaîne ou non, utilisez strtok :
la source
La question, est-ce que l'exemple fourni est juste un "exemple" ou exactement ce que vous recherchez? Il y a beaucoup de réponses mitigées ici, et je ne comprends pas la complexité de la réponse acceptée.
Pour savoir si N'IMPORTE QUEL contenu du tableau d'aiguilles existe dans la chaîne et renvoyer rapidement true ou false:
Si oui, veuillez donner @Leon .
Pour savoir si TOUTES les valeurs du tableau d'aiguilles existent dans la chaîne, comme dans ce cas, les trois
'a', 'b'
et'c'
DOIVENT être présentes, comme vous le mentionnez comme "par exemple"Beaucoup de réponses ici sont hors de ce contexte, mais je doute que l'intension de la question que vous avez marquée comme résolue. Par exemple, la réponse acceptée est une aiguille de
Et si tous ces mots DOIVENT être trouvés dans la chaîne?
Ensuite, vous en essayez
"not accepted answers"
sur cette page.la source
Cette expression recherche toutes les lettres:
la source
Vous pouvez essayer ceci:
la source
Vous pouvez également essayer d'utiliser strpbrk () pour la négation (aucune des lettres n'a été trouvée):
la source
Telle est ma démarche. Itérez les caractères de la chaîne jusqu'à ce qu'une correspondance soit trouvée. Sur un plus grand nombre d'aiguilles, cela surpassera la réponse acceptée car il n'est pas nécessaire de vérifier chaque aiguille pour déterminer qu'une correspondance a été trouvée.
J'ai comparé cela à la réponse acceptée et avec un tableau de plus de 7,
$needles
c'était considérablement plus rapide.la source
Avec le code suivant:
Vérifiez ensuite la valeur de
$flag
. Si c'est le castrue
, toutes les lettres ont été trouvées. Sinon, c'estfalse
.la source
J'écris une nouvelle réponse qui, espérons-le, aidera tous ceux qui recherchent des choses similaires à ce que je suis.
Cela fonctionne dans le cas de "J'ai plusieurs aiguilles et j'essaye de les utiliser pour trouver une chaîne de caractères". et c'est la question que j'ai rencontrée pour trouver cela.
Le tableau
$found
contiendra une liste de toutes les aiguilles correspondantes, l'élément du tableau avec la valeur de comptage la plus élevée sera la ou les chaînes que vous recherchez, vous pouvez l'obtenir avec:la source
Répondez à @binyamin et @Timo .. (pas assez de points pour ajouter un commentaire ..) mais le résultat ne contient pas la position ..
Le code ci-dessous retournera la position réelle du premier élément à laquelle strpos est destiné faire. Ceci est utile si vous prévoyez de trouver exactement 1 correspondance. Si vous prévoyez de trouver plusieurs correspondances, la position du premier trouvé peut être sans signification.
la source
Juste une mise à niveau des réponses ci-dessus
la source