2010-04-19 49 views
1

我有一个数组和一个变量,我想检查是否有任何数组项出现在变量中。我认为我以某种方式使用strstr()?PHP是变量中的数组项目

例子:

$bad = array('google.com', 'facebook.com', 'myspace.com'); 
$ref = $_SERVER['HTTP_REFERER']; 
if(ANY OF $bad IS IN $ref) { 
...   
} 
+2

你能举个例子吗? – Gumbo 2010-04-19 14:52:47

+0

给出了数组和变量的例子 – Galen 2010-04-19 14:54:49

回答

4
foreach ($array as $value) { 
    if (strpos($variable, $value) !== false) { 
     // yep, this array element exists in your variable, do what you want here 
    } 
} 

strpos()strstr()一个更好的选择,它占用资源少重。)

0

您应该使用strpos,如果你只是想确定变量存在,但你并不需要返回字符串的一部分。

0

如果您需要串匹配您的查阅情况(例如,匹配 '三' 在 '...三...'):

$array = array('one', 'two', 'three', ...); 
$val = '...three...'; 
foreach ($array as $entry) { 
    if (strpos($val, $entry) !== false) { 
     print 'Look ma, I found it!'; 
    } 
} 

如果不是(即你正在寻找完全匹配),你可以;

$array = array('one', 'two', 'three', ...); 
$needle = 'three'; 
if (in_array($needle, $array)) { 
    print 'Look ma, I found it!'; 
} 

根据@ pinkgothic的(正确)的评论编辑。

+0

如果交换if(strpos($ entry,$ needle)!== false){'for'if(strpos($ needle,$ entry)!== false){'在你的第一个答案中(理想情况下将'$ needle'重命名为'$ variable'),这是对这个问题的完美回答!问题是数组元素是否在变量中,而不是相反。 :) – pinkgothic 2010-04-19 15:09:12

+0

@pinkgothic你说得对。编辑。 – jensgram 2010-04-19 16:07:59

1

你可以不喜欢这样,但它是一个有点欺骗的。 str_ireplace()将采用一系列搜索值,并且还会告诉您它做了多少替换,因此如果它做了替换,则您知道您有匹配。

<?php 

$bad = array('google.com', 'facebook.com', 'myspace.com'); 
$ref = $_SERVER['HTTP_REFERER']; 

str_ireplace($bad, '', $ref, $count); 

if ($count > 0) { 
    die ('bad'); 
} 
+0

哦,这是一个有趣的窍门 - 我喜欢开箱即用的想法。虽然如果其中一个数组元素是另一个数组的子集,或者重叠,那么'$ count'将不会正确?记住,这当然只有在你需要确切数量的比赛时才有意义,我怀疑是这种情况。 [我确实需要在SO的前五分钟内停止达到我每天的投票上限。 c_c] – pinkgothic 2010-04-19 15:17:41

+0

@pinkgothic:是的,你会得到一个更小的计数,因为随后的搜索将在修改的字符串上。 – 2010-04-19 15:24:42

+0

不过,这真是太棒了!我将它提交给记忆。感谢你的分享。 :) – pinkgothic 2010-04-19 15:27:42