Vérification de plusieurs valeurs strpos
je me demande comment effectuer plusieurs contrôles strpos.
permettez-moi de clarifier:
Je veux que strpos vérifie la variable "COLOR" pour voir si des nombres de 1 à 8 sont n'importe où dans la variable. Si des nombres de 1 à 8 sont présents, je veux faire écho à "selected".
exemples:
Disons que seul le nombre 1 est dans la variable, il sera echo "selected".
Disons que les nombres 1 2 et 3 sont dans la variable, il will echo "sélectionné."
Disons que les nombres 3 9 25 sont dans la variable, il will echo "sélectionné" (à cause de ce 3!!).
Disons que seul le nombre 9 est dans la variable, il ne fera pas écho.
Disons que les nombres 9 25 48 sont dans le variable, il ne sera pas écho.
5 réponses
j'ai simplement utilisé l'instruction OU (||)
<?php
if (strpos($color,'1') || strpos($color,'2') || strpos($color,'3') || strpos($color,'4') || strpos($color,'5') || strpos($color,'6') || strpos($color,'7') || strpos($color,'8') === true)
{
//do nothing
} else {
echo "checked";
}
?>
j'ai trouvé les réponses ci-dessus, incomplète et avec ma propre fonction:
/**
* Multi string position detection. Returns the first position of $check found in
* $str or an associative array of all found positions if $getResults is enabled.
*
* Always returns boolean false if no matches are found.
*
* @param string $str The string to search
* @param string|array $check String literal / array of strings to check
* @param boolean $getResults Return associative array of positions?
* @return boolean|int|array False if no matches, int|array otherwise
*/
function multi_strpos($string, $check, $getResults = false)
{
$result = array();
$check = (array) $check;
foreach ($check as $s)
{
$pos = strpos($string, $s);
if ($pos !== false)
{
if ($getResults)
{
$result[$s] = $pos;
}
else
{
return $pos;
}
}
}
return empty($result) ? false : $result;
}
Utilisation:
$string = "A dog walks down the street with a mouse";
$check = 'dog';
$checks = ['dog', 'cat', 'mouse'];
#
# Quick first position found with single/multiple check
#
if (false !== $pos = multi_strpos($string, $check))
{
echo "$check was found at position $pos<br>";
}
if (false !== $pos = multi_strpos($string, $checks))
{
echo "A match was found at position $pos<br>";
}
#
# Multiple position found check
#
if (is_array($found = multi_strpos($string, $checks, true)))
{
foreach ($found as $s => $pos)
{
echo "$s was found at position $pos<br>";
}
}
essayer preg match pour plusieurs
if (preg_match('/word|word2/i', $str))
Si toute valeur est séparé par un espace en valeur, alors vous pouvez faire ce qui suit. Sinon l'ignorer.
il est nécessaire parce que si vous avez $color="25";
puis strpos
trouverez à la fois 2, 5 et 25 ainsi résultat requis ne viendra pas
<?php
$color='1 25 48 9 3';
$color_array = explode(" ",$color);
$find = range(1,8);//array containing 1 to 8
$isFound = false;
foreach($find as $value) {
if(in_array($value, $color_array))
{
$isFound = true;
break;
}
}
if($isFound) {
echo "Selected";
}
?>
if (preg_match('/string1|string2|string3/i', $str)){
//if one of them found
}else{
//all of them can not found
}