Php in_array()希望参数2是数组

Php in_array()希望参数2是数组,php,arrays,return,Php,Arrays,Return,我有一个多数组的想法,将我的文件分为不同的组/数组。 认为这将是检查我们在其中的文件的最简单、最干净的方法,导航选项卡1、2或3上的导航状态是否应设置为活动 我有这个阵列 Array ( [home] => Array ( [0] => index.php [1] => something.php ) [tour] => Array ( [0] => tour.php ) [tuto

我有一个多数组的想法,将我的文件分为不同的组/数组。 认为这将是检查我们在其中的文件的最简单、最干净的方法,导航选项卡1、2或3上的导航状态是否应设置为活动

我有这个阵列

Array
(
[home] => Array
    (
        [0] => index.php
        [1] => something.php
    )

[tour] => Array
    (
        [0] => tour.php
    )

[tutorials] => Array
    (
        [0] => tutorials.php
    )
)
这个想法是,如果我单击home navigation按钮,它将转到index.php,一个函数将检查需要活动状态的是home按钮还是Tour按钮。在这种情况下,它的主页按钮

[home] => Array
    (
        [0] => index.php
我做了这个函数

function findNavigationActive($tap, $filename) {
    if(in_array($filename, $topNavigationPages[$tap])) {
    return 1;
}
return 0;
}
它应该检查index.php($filename)是否在Home($tap)数组或navi-tap中,然后返回1。不幸的是,我纠正了这个错误

警告:in_array()要求参数2为数组,第21行的/project/./../topNavigationHandler.php中给出了null

我做错了什么

固定的

使用全局$topNavigationPages;在函数外部,并在下面设置$topNavigationPages值(数组),然后再次在函数内部使用全局$topNavigationPages将数组拉入。
谢谢@坟墓

此错误的意思是第二个参数不是数组,因此您可以尝试以下操作:

if (is_array($topNavigationPages[$tap])) {
    if(in_array($filename, $topNavigationPages[$tap])) {
        return 1;
    }
}
return 0;
通过使用严格的and运算符,可以在不嵌套if循环的情况下执行此操作

希望这有帮助

注:
要解决范围问题,可以使用全局值或常量。若要使用常量,请使用“define”函数,对于全局变量,请在文件开头和随后使用它的每个函数中声明变量。我强烈建议使用常量。

变量范围问题,$topNavigationPages未在函数中定义或传递给函数$tap和$topNavigationPagesHow的值是多少?我能解决这个问题吗?-@jdog:$tap应该是home、tour或tutorials,而$topNavigationPages是更大的数组。像比较其他变量一样解析数组,
function findNavigationActive($tap,$filename,$topNavigationPages){
或者更好的
function findNavigationActive($filename,$topNavigationPages[$tap]){
如果我想在其他页面上使用此功能,而不必将$topNavigationPages复制到每个页面,该怎么办?我在发布后注意到了这一点,并进行了一些编辑。我解决了范围问题以及$tap不是数组的潜在错误,我是否遗漏了什么?我添加了全局$topNavigationPages;$topNavigationPages=array(…);当我检查if(findNavigationActive(“home”,“index.php”){echo“1”;}else{echo“0”;}时,它返回0。您需要首先将数组声明为函数外部的全局数组,然后在调用它时再次声明为函数内部。另一种方法是使用define将它定义为函数外部的常量('NAV_ARRAY',$topNavigationPages,True);然后将$topNavigationPages替换为函数内部的NAV_ARRAY(不声明任何内容为全局)。我不知道我需要在函数外部和内部使用全局。非常感谢,它现在非常有效!强烈建议不要使用全局。