2013-12-20 36 views
4

我知道strpos是如何工作的,它按預期工作,但if函數中的返回值不是。如果strpos不完全錯誤,如何返回true?

一些代碼:

foreach ($socialstream as $key => $social) { 
    //filtering in here 
    $result= $this->search_objects($social); 
    .... 
} 

我的功能search_objects:

function search_objects($objects) 
{ 
    $filters = array('word', 'test'); 
    foreach ($objects as $key => $value) { 
     if (is_array($value) || is_object($value)) { 
      $this->search_objects($value); 
     } else { 
      //look for faulty strings in value 
      foreach ($filters as $filter) { 
       if (!is_int($value) && strpos($value, $filter) !== false) { 
        return true; 
       } 
      } 

     } 
    } 
    return false; 
} 

如果我打印出if功能我$result,我總是得到false回來,而不是true。我知道,當針在乾草堆中存在時,通過調試,它會到達if,但它不會返回。

我錯過了什麼?

+0

添加'的var_dump(is_int($值)&& strpos! ($ value,$ filter)!== false);'在你的第二個'foreach'裏面,看看它在每次迭代時輸出的內容。 –

+0

你真的讀過我的第一條評論嗎? 「不是** a ** var_dump()」。複製粘貼確切的命令:) –

+0

如果存在則返回true,否則返回false。這是你所期望的嗎? – Bananam00n

回答

2

我覺得你的問題與遞歸部分做:

if (is_array($value) || is_object($value)) { 
     $this->search_objects($value); 
    } 

你可能想要做的返回值的東西。像:if ($this->search_objects($value)) return true;

(話又說回來,我不知道你想達到的目的)

編輯:試試這個:

function search_objects($objects) 
{ 
    $filters = array('word', 'test'); 
    foreach ($objects as $key => $value) { 
     if (is_array($value) || is_object($value)) { 
      if ($this->search_objects($value)) { 
       return true; 
      } 
     } else { 
      //look for faulty strings in value 
      foreach ($filters as $filter) { 
       if (!is_int($value) && strpos($value, $filter) !== false) { 
        return true; 
       } 
      } 

     } 
    } 
    return false; 
} 
+0

該功能是刪除其中包含 - 例如 - 罵人詞的帖子。所以如果在帖子中有一個詛咒詞,整個事情就不應該顯示出來。 (而不是從帖子中刪除這個詞) – Bananam00n

+1

我的觀點是遞歸位的結果完全被忽略了。如果外部函數調用發現$ value是數組或對象,它將使用$ value再次調用同一個函數(內部),但是當它返回時,外部函數對結果不起任何作用。所以它默認在函數結尾處的'return false'。 –

+0

我更新了我的答案。看看這是否適合你。 –