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

これはおそらくあなたがやりたいことです:

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 に答える