0

我有这段代码,在它之前没有任何代码引用下面看到的任何变量。但是我仍然找不到为什么会收到错误消息:“第一个参数应该是...中的数组”

$array = array("element here for reason");

function sortdata()
{
    $File = fopen("Names.txt", "r");

    //put each file line into an array element
    while(!feof($File))
    {
        array_push($array, fgets($File));
    }
}
4

5 回答 5

4

$array超出了该功能的范围。您可以使用global.

$array = ..;
function sortdata() {
    global $array;
    ...
}
sortdata();

或者,您可以通过引用将其传递给函数。

$array = ..;
function sortdata(&$array) {
    ...
}
sortdata($array);
于 2012-11-28T04:09:58.120 回答
0

您应该尝试首先初始化数组并将数组置于函数范围内,如下所示:

$array = array();
array_push($array, "element here for reason");

function sortdata()
{
    global $array;

    $File = fopen("Names.txt", "r");

    //put each file line into an array element
    while(!feof($File))
    {
        array_push($array, fgets($File));
    }
}
于 2012-11-28T04:10:37.760 回答
0

代码的问题是您没有将 $array 变量传递给函数。除此之外,使用快捷方式将项目添加到数组而不是调用 array_push 会更有效,因为它消除了调用函数的开销。

$array = array("element here for reason");

function sortdata($array)
{
    $File = fopen("Names.txt", "r");

    //put each file line into an array element
    while(!feof($File))
    {
        $array[] = fgets($File);
    }

    return $array;
}
于 2012-11-28T04:11:48.620 回答
0

您在函数体内使用变量 $array 。在这种情况下,这是局部变量,它会自动设置为字符串。

要使用全局变量 $array,您应该在函数中使用全局指令。

function sortdata() {
global $array;
/* there your code for work with $array */
}
于 2012-11-28T04:16:50.107 回答
0
This give you backward compatibility

function sortdata(array $array = array())
{
    $File = fopen("Names.txt", "r");

    while(!feof($File))
    {
      array_push($array, fgets($File));
    }


    return $array;
}
于 2012-11-28T05:24:52.490 回答