2011-08-02 45 views
0

我有点困惑,似乎无法解决为什么下面的代码不能正常工作。用php搜索字符串中的字符串?

function find($haystack, $needles) { 
    $needle = array_map('trim', explode(",", $needles)); 
    foreach ($needle as $key => $value) { 
     if (strpos($haystack, $value) !== false) { 
      return true; 
     } 
    } 
    return false; 
} 

我使用下面的代码作为方法来确定哪些元素应显示在某些页面上或向某些元素添加类。例如,我将使用

<?php if (find($section, "home")) { ?> class="current"<?php } ?> 

添加类当前如果$section = "home"。我还可以使用此功能以显示在多个页面例如

<?php if (find($section, "about, media")) { ?> 

和某些元素相同的,如果我想显示在所有页面上的元素,但不是在选择

<?php if (!find($section, "contact")) { ?> 

,最后它可以例如用于多个变量。

<?php if (find($page, "news") || find($section, "news")) { ?> 

这是当我使用的功能,试图打造一个更复杂的if语句来从选择的页面,它似乎无法删除元素,在这个例子中,变量和if语句,如果你是这样的新闻部分页面或新闻页面后:

<?php if (!find($page, "news") || !find($section, "news")) { ?> 

$page = "news"$section = "media news section"
$page = "post"$section = "media news post dynamic"

我无法弄清楚为什么这些具体的陈述没有返回错误。任何帮助将不胜感激,或更好的方向/方法是值得欢迎的。非常感谢

回答

2

它对第一组变量返回false,对第二组返回true(因为$ page不包含'news')。代码按预期工作。

如果你希望它在这两种情况下返回false,改变OR||)到AND&&),这样既条件必须为真(字新闻不得在任何可以找到)。

if (!find($page, "news") && !find($section, "news")) { 
+0

我很明白为什么它可能不工作,但在这个例子中的目标是为任何一组变量返回false。我如何重写if语句来返回false? –

+0

'if(!find($ page,“news”)&&!find($ section,“news”)){' –

+0

谢谢!看起来很简单,刚开始时我的头就不能包住它。 –