104 votes

Utiliser un tableau comme aiguilles dans strpos

Comment utilisez-vous le strpos pour un tableau d'aiguilles lors de la recherche d'une chaîne ? Par example:

 $find_letters = array('a', 'c', 'd');
$string = 'abcdefg';

if(strpos($string, $find_letters) !== false)
{
    echo 'All the letters are found in the string!';
}

Parce que lors de l'utilisation de ceci, cela ne fonctionnerait pas, ce serait bien s'il y avait quelque chose comme ça

155voto

Binyamin Points 1549

@Dave un extrait 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';
}

renverra 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

76voto

Leon Points 253

str_replace est considérablement plus rapide.

 $find_letters = array('a', 'c', 'd');
$string = 'abcdefg';
$match = (str_replace($find_letters, '', $string) != $string);

20voto

Dave Points 14168

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 :

 <?php
/* strpos that takes an array of values to match against a string
 * note the stupid argument order (to match strpos)
 */
function strpos_arr($haystack, $needle) {
    if(!is_array($needle)) $needle = array($needle);
    foreach($needle as $what) {
        if(($pos = strpos($haystack, $what))!==false) return $pos;
    }
    return false;
}
?>

Usage:

 $needle = array('something','nothing');
$haystack = "This is something";
echo strpos_arr($haystack, $needle); // Will echo True

$haystack = "This isn't anything";
echo strpos_arr($haystack, $needle); // Will echo False 

7voto

Evan Mulawski Points 28536

Vous pouvez parcourir le tableau et définir une valeur "drapeau" si strpos renvoie false .

 $flag = false;
foreach ($find_letters as $letter)
{
    if (strpos($string, $letter) === false)
    {
        $flag = true;
    }
}

Vérifiez ensuite la valeur de $flag .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X