1
    $genreList;

    function directorGen($array)
    {
        foreach($array as $value)
        {
          $genreList[] = $value;    
        }
    }

   //later..

   directorGen($title->genres());

此代码生成一个 NULL 数组。如果我将 $genreList[] = $value 替换为 echo $value ,一切都会按预期打印出来。有任何想法吗?

4

6 回答 6

2

如果$genreList是一个全局变量,那就是你的问题:这是一个范围问题。它可以通过以下方式轻松修复:

$genreList = array();

function directorGen($array) {
    global $genreList;
    foreach($array as $value) {
        $genreList[] = $value;        
    }
}

注意:虽然不是绝对必要的,但我也对其进行了初始化,我认为这是一种很好的做法。

如果directorGen()是成员函数并且$genreList是数据成员,则更改为:

function directorGen($array) {
    foreach($array as $value) {
        $this->genreList[] = $value;        
    }
}
于 2009-04-13T03:27:26.597 回答
0

在哪里$genreList定义?它可能只是一个函数局部变量,在这种情况下,它会在函数退出时丢失。如果它是类级别的变量,请记住$this->genreList改用。

编辑

我的错。如果它是一个全局变量,您需要将它添加到函数的顶部,以便 PHP 找到它:

global $genreList;
于 2009-04-13T03:24:26.277 回答
0

这是一个范围问题。directorGen() 中的 $genreList 仅存在于 directorGen() 中,它并不是隐含的全局变量,因为它在函数之外被提及。尝试global $genreList在函数顶部使用。

于 2009-04-13T03:25:50.487 回答
0

以下任何一项都可以解决您的问题;

$genreList[] .= $value; // Appends each value to the array. 

array_push($genreList, $value);

同样是我的错误,您应该通过以下语句从函数返回genreList:

return $genreList;

使用 global 关键字通常被认为是一种代码异味,因为它会在跟踪全局变量的使用以及它的值发生变化时产生许多问题。

于 2009-04-13T03:27:21.340 回答
0
function directorGen($array)
{
    $genreList = array();

    foreach($array as $value)
    {
        $genreList[] = $value;        
    }

    return $genreList;
}

//之后..

导演根($title->genres());

您将始终收到数组。甚至是空的。而且你不需要用 is_array() 函数检查它。

于 2009-04-13T11:46:05.650 回答
0

这可能是你想要做的:

class Test {
    //public, protected, private ...
    var $genreList = array();

    function directorGen(array $array) {
        //remove string keys
        $values = array_values($array);
        $this->genreList = array_merge($this->genreList, $values);
    }
}

注意:将重置计数器。如果您取消设置一个值,然后添加新值,键将被重置,最低为 0,最大值为 count - 1。

于 2009-04-13T16:35:08.250 回答