Что не так с моим массивом PHP? - PullRequest
1 голос
/ 13 апреля 2009
    $genreList;

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

   //later..

   directorGen($title->genres());

Этот код приводит к массиву NULL. Если я заменим $ genreList [] = $ value на echo $ value, все будет напечатано, как и ожидалось. Есть идеи?

Ответы [ 6 ]

2 голосов
/ 13 апреля 2009

Если $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 голосов
/ 13 апреля 2009

Это, вероятно, то, что вы хотите сделать:

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.

0 голосов
/ 13 апреля 2009
function directorGen($array)
{
    $genreList = array();

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

    return $genreList;
}

// позже ..

directorGen ($ Заголовок-> жанры ());

Вы всегда получите массив. Даже пусто. И вам не нужно проверять это с помощью функции is_array ().

0 голосов
/ 13 апреля 2009

Любое из следующих действий должно решить вашу проблему;

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

array_push($genreList, $value);

Также моя ошибка, вы должны возвращать genreList из функции через это утверждение:

return $genreList;

Использование ключевого слова global обычно считается запахом кода, поскольку оно может создавать многочисленные проблемы при отслеживании использования глобальной переменной, а также ее значения при его изменении.

0 голосов
/ 13 апреля 2009

Это проблема масштаба. $ GenreList в DirectorGen () существует только в DirectorGen (), он не является неявным глобальным только потому, что он был упомянут вне функции. Попробуйте использовать global $genreList в верхней части функции.

0 голосов
/ 13 апреля 2009

Где определено $genreList? Это может быть просто локальная переменная функции, и в этом случае она теряется при выходе из функции. Если это переменная уровня класса, не забудьте использовать $this->genreList.

Редактировать

Моя ошибка. Если это глобальная переменная, вам нужно добавить это в верхнюю часть функции, чтобы PHP нашел ее:

global $genreList;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...