如何检查$string
是否包含数组中表达的任何项目?字符串包含数组中的任何项(不区分大小写)
$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(contains($string,$array))
{
// do something to say it 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) {
if(in_array($word, $array)) {
$wordsInArray[] = $word;
}
}
这只能匹配整个单词。 – apokryfos 2015-10-16 09:17:52
我不认为有一个内置函数可以处理你想要的。你可以很容易地写。然而功能:
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";
}
}
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'));
使用接受回答:
因为它是不是真的有必要使用array_map申请strtolower
给每个元素
if(0 < count(array_intersect(explode(' ', strtolower($string)), $array)))
:
$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(0 < count(array_intersect(array_map('strtolower', explode(' ', $string)), $array)))
{
//do sth
}
只是一个侧面说明了if语句可能被更改为。而是将其应用于初始字符串。对于
+1对我3年的旧代码进行一些改进;-) – sbczk 2013-10-28 19:47:34
谢谢。实际上,我的第一篇文章就在这里。一个人必须从某处开始吧? ;) – kkonstantinov 2013-10-31 17:24:19
这个(连同接受的答案)匹配整个单词而不是子字符串,所以如果你需要匹配多于整个单词,你应该使用@zombat的答案。 – apokryfos 2015-10-16 09:16:39
还有一个解决办法包含功能
function contains($string, $array, $caseSensitive = true)
{
$stripedString = $caseSensitive ? str_replace($array, '', $string) : str_ireplace($array, '', $string);
return strlen($stripedString) !== strlen($string);
}
PS。就我而言,我只是使用它没有功能..
if (strlen(str_replace($array, '', $string)) !== strlen($string)) {
// do it
}
我喜欢这个解决方案:) – Joel 2016-05-20 11:33:21
<?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);
?>
另一种方式做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;
}
检查解决方案发布在[PHP检查字符串是否包含数组中的值](http://stackoverflow.com/a/40543118/4243217) – jitendrapurohit 2016-11-11 08:35:10