2010-04-19 81 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