Php 字符串包含数组中的任何项(不区分大小写)
如何检查Php 字符串包含数组中的任何项(不区分大小写),php,string,arrays,contains,Php,String,Arrays,Contains,如何检查$string是否包含数组中表示的任何项 $string = 'My nAmE is Tom.'; $array = array("name","tom"); if(contains($string,$array)) { // do something to say it contains } 有什么想法吗?这样行吗 $words = explode(" ", $string); $wordsInArray = array(); foreach($words as $word) {
$string
是否包含数组中表示的任何项
$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(contains($string,$array))
{
// do something to say it contains
}
有什么想法吗?这样行吗
$words = explode(" ", $string);
$wordsInArray = array();
foreach($words as $word) {
if(in_array($word, $array)) {
$wordsInArray[] = $word;
}
}
这就是你想要的吗?我希望代码正在编译:)
$string='我叫汤姆';
$array=数组(“名称”、“tom”);
如果(0<计数(数组相交(数组映射('strtolower',explode('',$string)),$array)))
{
//做某事
}
我认为没有一个内置函数可以处理您想要的内容。您可以轻松编写contains()
函数,但是:
function contains($str, array $arr)
{
foreach($arr as $a) {
if (stripos($str,$a) !== false) return true;
}
return false;
}
类似这样的方法会奏效:
$string = 'My nAmE is Tom.';
$array = array("name", "tom");
foreach ($array as $token) {
if (stristr($string, $token) !== FALSE) {
print "String contains: $token\n";
}
}
更简单,请参考链接
使用公认的答案:
$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(0 < count(array_intersect(array_map('strtolower', explode(' ', $string)), $array)))
{
//do sth
}
$string='我叫汤姆';
$array=数组(“名称”、“tom”);
如果(0<计数(数组相交(数组映射('strtolower',explode('',$string)),$array)))
{
//做某事
}
请注意,if语句可以更改为:
if(0 < count(array_intersect(explode(' ', strtolower($string)), $array)))
if(0
因为实际上没有必要使用数组映射将
strtolower
应用于每个元素。而是将其应用于初始字符串。contains函数还有一个变通方法
function contains($string, $array, $caseSensitive = true)
{
$stripedString = $caseSensitive ? str_replace($array, '', $string) : str_ireplace($array, '', $string);
return strlen($stripedString) !== strlen($string);
}
另外,对我来说,我只是使用它,没有任何功能
if (strlen(str_replace($array, '', $string)) !== strlen($string)) {
// do it
}
使用array_intersect()函数的另一种方法,请尝试以下代码:
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;
}
我们可以检查给定字符串中是否存在数组的任何元素
$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(str_replace($array, '', strtolower($string)) !== strtolower($string)) {
// If String contains an element from array
// Do Something
}
这将在字符串上失败:“Tom,你怎么看?”“他的‘名字’是Tom。”以及其他许多字符串。+1表示不太复杂,不使用正则表达式,也不试图将其全部放在一行中。为什么不使用正则表达式?我认为解释preg_match(“/”。内爆(“|”)、$arr.“/I”、$str)很好,很简单@develop:)我想知道哪一个性能更好。@develop虽然是一种有效的方法,但在功能上并不等同。考虑到通过正则表达式进行匹配,需要编写数组。否则,如果数组中的任何字符串包含a/or |或任何其他修饰符,它将提供意外的结果。使用Larvel的开发人员提示:从5.7开始,此方法在框架中以Str::contains(string$haystack,array | string$niels)
和stru-contains(string$haystack,array | string$niels)的形式存在
适用于5.6版。嗯,除了他试图在一个句子中找到特定的子字符串外。你正在寻找与数组中的完全匹配的子字符串,这不是正确的答案。谢谢。实际上,我在这里的第一篇帖子。一个人必须从某个地方开始,对吗?;)这(连同被接受的答案)匹配的是整个单词而不是子字符串,所以如果你需要匹配更多的单词,你可能应该使用@zombat的答案。这只匹配整个单词。
if (strlen(str_replace($array, '', $string)) !== strlen($string)) {
// do it
}
<?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);
?>
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;
}
$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(str_replace($array, '', strtolower($string)) !== strtolower($string)) {
// If String contains an element from array
// Do Something
}