我有一個數組和一個變量,我想檢查是否有任何數組項出現在變量中。我認爲我以某種方式使用strstr()?PHP是變量中的數組項目
例子:
$bad = array('google.com', 'facebook.com', 'myspace.com');
$ref = $_SERVER['HTTP_REFERER'];
if(ANY OF $bad IS IN $ref) {
...
}
我有一個數組和一個變量,我想檢查是否有任何數組項出現在變量中。我認爲我以某種方式使用strstr()?PHP是變量中的數組項目
例子:
$bad = array('google.com', 'facebook.com', 'myspace.com');
$ref = $_SERVER['HTTP_REFERER'];
if(ANY OF $bad IS IN $ref) {
...
}
您應該使用strpos,如果你只是想確定變量存在,但你並不需要返回字符串的一部分。
如果您需要串匹配您的查閱情況(例如,匹配 '三' 在 '...三...'):
$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的(正確)的評論編輯。
如果交換if(strpos($ entry,$ needle)!== false){'for'if(strpos($ needle,$ entry)!== false){'在你的第一個答案中(理想情況下將'$ needle'重命名爲'$ variable'),這是對這個問題的完美回答!問題是數組元素是否在變量中,而不是相反。 :) – pinkgothic 2010-04-19 15:09:12
@pinkgothic你說得對。編輯。 – jensgram 2010-04-19 16:07:59
你可以不喜歡這樣,但它是一個有點欺騙的。 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');
}
哦,這是一個有趣的竅門 - 我喜歡開箱即用的想法。雖然如果其中一個數組元素是另一個數組的子集,或者重疊,那麼'$ count'將不會正確?記住,這當然只有在你需要確切數量的比賽時纔有意義,我懷疑是這種情況。 [我確實需要在SO的前五分鐘內停止達到我每天的投票上限。 c_c] – pinkgothic 2010-04-19 15:17:41
@pinkgothic:是的,你會得到一個更小的計數,因爲隨後的搜索將在修改的字符串上。 – 2010-04-19 15:24:42
不過,這真是太棒了!我將它提交給記憶。感謝你的分享。 :) – pinkgothic 2010-04-19 15:27:42
你能舉個例子嗎? – Gumbo 2010-04-19 14:52:47
給出了數組和變量的例子 – Galen 2010-04-19 14:54:49