如果strpos不完全为false,如何返回true?

4
我知道如何使用strpos函数,它也按照预期工作,但是if函数的返回值却不是如此。

一些代码:

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;
}

如果我打印出$result,我总是得到false,而不是if函数中的true。通过调试,我知道当针存在于干草堆中时,它进入了if,只是没有返回结果。
我错过了什么?

在你的第二个foreach中添加var_dump(!is_int($value) && strpos($value, $filter) !== false);,并查看每次迭代的输出。 - Amal Murali
你真的读了我的第一条评论吗?“不是一个 var_dump()”。复制粘贴那个确切的命令 :) - Amal Murali
如果存在则返回true,否则返回false。这是您预期的结果吗? - Bananam00n
@Bananam00n 你想做什么?如果找到一个过滤器,它应该返回 false,对吗? - h2ooooooo
只要筛选数组中存在一个单词,就应该返回 true 并退出 foreach 循环,因为继续循环没有意义。 - Bananam00n
1
考虑为您的函数添加一个 array 类型提示,以提高安全性,例如 function search_objects(array $objects)。这将排除任何不是数组的内容(假设这正是您想要的)。 - halfer
1个回答

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;
}

该函数的作用是删除帖子中含有脏话等不良语言的内容。因此,如果帖子中包含脏话,则整个帖子都不应该显示出来(而不是将脏话从帖子中“删除”)。 - Bananam00n
1
我的观点是,递归位的结果完全被忽略了。如果外部函数调用发现一个 $value 是数组或对象,它会再次调用相同的函数(内部)与 $value,但当它返回时,外部函数不会做任何与结果相关的事情。所以它默认为函数末尾的 'return false'。 - Tasos Bitsios
哦,现在我明白你做了什么!非常感谢!:-) 真不敢相信我居然错过了那个。 - Bananam00n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接