2009-04-13 18 views
1
$genreList; 

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

    //later.. 

    directorGen($title->genres()); 

このコードの結果、NULL配列になります。 $ genreList [] = $ valueをecho $ valueに置き換えると、すべてが期待どおりに出力されます。何か案は?私のPHP配列に何が問題なのですか?

答えて

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;   
    } 
} 
0

$genreListはどこですか?これは単に関数ローカル変数である可能性があります。その場合、関数が終了すると失われます。クラスレベルの変数の場合は、代わりに$this->genreListを使用してください。

編集

私のミス。それはグローバル変数の場合は、PHPはそれを見つけるために、関数の先頭にこれを追加する必要があります。

global $genreList; 
+0

これはOOコードではありません。 –

+0

はい、私たちはOOコードではないことを知っていますが、変数/配列(グローバル/ローカル)のスコープは、PHPの基本であって、OO utとPHPの全体的なコンセプトに関連するだけではありません... – Dels

0

それはスコープの問題です。 directorGen()内の$ genreListはdirectorGen()内にのみ存在しますが、関数の外で言及されただけなので、暗黙的にグローバルではありません。機能の上部にglobal $genreListを使用してみてください。

+0

Nevermind ..ありがとう。 –

+0

おかげさまで、受け入れられた答えを考慮して、関数の先頭にグローバル宣言を追加しました。 –

0

いずれかの問題を解決する必要があります。また

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

array_push($genreList, $value); 

私のミス

は、あなたがこの文を経由して関数からgenreListを返すべきである:

return $genreList; 

globalキーワードを使用して、一般的に、それは追跡に多くの問題を作成することができるように、コードのにおいと考えられていますグローバル変数の使用方法、およびグローバル変数の値の変更

+0

最初のコード行の文字列連結演算子は冗長です。 –

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

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

    return $genreList; 
} 

//後で..

directorGen(($ title->ジャンル));

あなたは常に配列を受け取ります。それでも空です。 is_array()関数でチェックする必要はありません。

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); 
    } 
} 

NB:カウンタをリセットします。値を設定解除して新しい値を追加すると、キーは0で最小値にリセットされ、カウント1でmaxにリセットされます。

関連する問題