Неожиданное поведение с ссылками на массивы PHP - PullRequest
0 голосов
/ 02 октября 2009

Я использую ссылки для изменения массива:

foreach($uNewAppointments as &$newAppointment)
{
    foreach($appointments as &$appointment)
    {
        if($appointment == $newAppointment){
            $appointment['index'] = $counter;
        }
    }
    $newAppointment['index'] = $counter;
    $newAppointments[$counter] = $newAppointment;

    $counter++;
}

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

Когда я удаляю оператор ссылки & во внутреннем массиве, все идет нормально, кроме индекса не установлен.

Ответы [ 2 ]

5 голосов
/ 02 октября 2009

Использование ссылок в циклах foreach вызывает проблемы :) Я делал это несколько раз и всегда переписывал этот код.

Тебе тоже следует. Как это:

foreach($uNewAppointments as $newAppointmentKey => $newAppointment)
{
        foreach($appointments as $appointmentKey => $appointment)
        {
                if($appointment == $newAppointment){
                        appointments[$appointmentKey]['index'] = $counter;
                }
        }
        $uNewAppointments[$newAppointmentKey]['index'] = $counter;
        $$uNewAppointments[$newAppointmentKey][$counter] = $newAppointment;

        $counter++;
}

Хотя я только что переписал его «механически», так что, вероятно, он не будет работать. Но это получить представление о том, как добиться того же эффекта, без побочных эффектов. В этом цикле вы все еще изменяете исходные массивы.

4 голосов
/ 02 октября 2009

Если вы сделаете это, вы должны сбросить $ newAppointment при выходе из цикла. Вот соответствующая запись .

...