Вопрос о PHP - PullRequest
       32

Вопрос о PHP

2 голосов
/ 21 мая 2010

Я пытаюсь просмотреть массив записей (сотрудников), в этом цикле я вызываю функцию, которая возвращает другой массив записей (встреч для каждого сотрудника).

foreach($staffmembers as $staffmember)
{   
        $staffmember['appointments'] = get_staffmember_appointments_for_day($staffmember);
        //  print_r($staffmember['appointments'] works fine 
}

Это работает нормально, однако позже в скрипте мне нужно снова просмотреть циклы записей, на этот раз используя массивы встреч, однако они недоступны.

foreach ($staffmembers as $staffmember)
{                                                             
        //do some other stuff
        //print_r($staffmember['appointments'] no longer does anything
}

Обычно я выполняю функцию из первого цикла, во втором, однако этот цикл уже вложен в два других, что приведет к тому, что один и тот же запрос SQL будет выполнен 168 раз.

Кто-нибудь может предложить обходной путь?

Любой совет будет принят с благодарностью.

Спасибо

1 Ответ

6 голосов
/ 21 мая 2010

foreach повторяется по копии массива. Если вы хотите изменить значение, вам нужно ссылка это:

foreach($staffmembers as &$staffmember) // <-- note the &
{   
    $staffmember['appointments'] = get_staffmember_appointments_for_day($staffmember);
    //  print_r($staffmember['appointments'] works fine 
}

Из документации:

Примечание: Если на массив не есть ссылки, foreach работает с копией указанного массива, а не с самим массивом. foreach имеет некоторые побочные эффекты на указатель массива. Не полагайтесь на указатель массива во время или после foreach без его сброса.

и

Начиная с PHP 5, вы можете легко изменять элементы массива, предшествуя $value с &. Это присвоит ссылку вместо копирования значения.

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