无论我输入什么,都提示找不到或无效的函数名,这与PHP中的array_filter函数有关。

8

我以前从未使用过array_filter函数,所以无论我使用什么函数名称,它都会报错。

Warning: array_filter() expects parameter 2 to be a valid callback, function 'odd' not found or invalid function name in

我甚至已经复制粘贴了PHP手册页面上的示例,但仍然出现了同样的错误。 代码:

function odd($var) {
    // returns whether the input integer is odd
    return($var & 1);
 }

function calculate($res, $period, $elements, $per, $total, $brand = false) {

    $array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
    $array2 = array(6, 7, 8, 9, 10, 11, 12);

    echo "Odd :\n";
    print_r(array_filter($array1, "odd"));
}

我真的不知道该怎么办了。通常当我遇到问题时,我可以复制和粘贴php手册页面上的代码,并从那里开始解决问题,但是如果他们的示例甚至都不能正常工作,那就很困难了。


2
嗯?对我来说它完全正常,你的PHP版本是多少? - yannis
看起来是有效的http://codepad.org/GV2Kyp89。那是完整的代码还是在发布之前,你对它进行了修剪? - Mike B
你能否重新启动 PHP 和 Apache,它在“4.3.0 - 5.4.9”上运行良好。 - Baba
1
@YannisRizos 在 MAMP 上使用 PHP 5.4.4。今天回到工作中,仍然收到相同的警告。我已将代码完全隔离在自己的程序中,并且它可以正常运行... 我不知道为什么不能在我编写的类中工作。没有其他被称为“odd”的函数,所以不可能是那个问题。 - mr mojo risin
请展示您的类和这些函数是如何定义的。 - NobleUplift
2个回答

12

我认为在你的情况下,函数 odd 并不是一个独立的函数,而是你的类的方法。在这种情况下,你应该写成:

print_r(array_filter($array1, array($this,"odd")));

运行您的类中的奇数方法


0
如果您的类相同并且在递归中调用方法,则PHP不知道该方法属于哪个类,因此请在数组中使用$this
array_filter($array1, array($this,"recursive"))

    public function customArrayFilter($logDate, $uid, $date)
    {
        $logDates = array($logDate);
        $result = array_filter($logDates, array($this, "recursive"));
        var_dump($result);
    }

    public function recursive($data)
    {
        return $data;
    }

   $this->customArrayFilter($data, 1, '2019-02-23');

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