我的PHP数组出了什么问题?

时间:2009-04-13 03:21:44

标签: php arrays foreach

    $genreList;

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

   //later..

   directorGen($title->genres());

此代码导致NULL数组。如果我用echo $ value替换$ genreList [] = $ value,所有内容都会按预期打印出来。有什么想法吗?

6 个答案:

答案 0 :(得分: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;        
    }
}

答案 1 :(得分:0)

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

修改

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

global $genreList;

答案 2 :(得分:0)

这是一个范围问题。 directorGen()中的$ genreList只存在于directorGen()中,它不是隐式的全局因为它是在函数外部提到的。尝试使用功能顶部的global $genreList

答案 3 :(得分:0)

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

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

array_push($genreList, $value);

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

return $genreList;

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

答案 4 :(得分:0)

function directorGen($array)
{
    $genreList = array();

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

    return $genreList;
}

//以后..

directorGen($标题 - >流派());

您将始终收到阵列。即使它是空的。而且您不需要使用is_array()函数进行检查。

答案 5 :(得分: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.