Comment puis-je vérifier si un $string
contient l'un des éléments exprimés dans un tableau?
$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(contains($string,$array))
{
// do something to say it contains
}
Des idées?
c'est ce que tu voulais? J'espère que ce code compile :)
$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(0 < count(array_intersect(array_map('strtolower', explode(' ', $string)), $array)))
{
//do sth
}
Je ne pense pas qu'il existe une fonction intégrée qui gérera ce que vous voulez. Vous pouvez facilement écrire une fonction contains()
cependant:
function contains($str, array $arr)
{
foreach($arr as $a) {
if (stripos($str,$a) !== false) return true;
}
return false;
}
En utilisant la réponse acceptée:
$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(0 < count(array_intersect(array_map('strtolower', explode(' ', $string)), $array)))
{
//do sth
}
Juste une note de côté que l'instruction if pourrait être modifiée en:
if(0 < count(array_intersect(explode(' ', strtolower($string)), $array)))
puisqu'il n'est pas vraiment nécessaire d'utiliser array_map pour appliquer strtolower
à chaque élément. à la place, appliquez-le à la chaîne initiale.
Une autre solution de contournement pour contient la fonction
function contains($string, $array, $caseSensitive = true)
{
$stripedString = $caseSensitive ? str_replace($array, '', $string) : str_ireplace($array, '', $string);
return strlen($stripedString) !== strlen($string);
}
PS quant à moi, je ne fais que l'utiliser sans fonction ..
if (strlen(str_replace($array, '', $string)) !== strlen($string)) {
// do it
}
Quelque chose comme ça marcherait:
$string = 'My nAmE is Tom.';
$array = array("name", "tom");
foreach ($array as $token) {
if (stristr($string, $token) !== FALSE) {
print "String contains: $token\n";
}
}
<?php
$input = preg_quote('blu', '~'); // don't forget to quote input string!
$data = array('orange', 'blue', 'green', 'red', 'pink', 'brown', 'black');
$result = preg_grep('~' . $input . '~', $data);
print_r($result);
?>
Est-ce que cela fera le travail?
$words = explode(" ", $string);
$wordsInArray = array();
foreach($words as $Word) {
if(in_array($Word, $array)) {
$wordsInArray[] = $Word;
}
}
function contains($str, $arr)
{
$ptn = '';
foreach ($arr as $s) {
if ($ptn != '') $ptn .= '|';
$ptn .= preg_quote($s, '/');
}
return preg_match("/$ptn/i", $str);
}
echo contains('My nAmE is Tom', array('name', 'tom'));
Une autre façon de faire avec la fonction array_intersect (), essayez le code ci-dessous:
function checkString(array $arr, $str) {
$str = preg_replace( array('/[^ \w]+/', '/\s+/'), ' ', strtolower($str) ); // Remove Special Characters and extra spaces -or- convert to LowerCase
$matchedString = array_intersect( explode(' ', $str), $arr);
if ( count($matchedString) > 0 ) {
return true;
}
return false;
}