如何檢查$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