Comportamento inesperado com referências de matriz PHP

Estou usando referências para alterar uma matriz:

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

Se eu imprimir o conteúdo da matriz, eu recebo o resultado esperado. Quando eu iterar sobre ele, todos os elementos parecem ser os mesmos (o primeiro).

Quando eu removo o operador de referência e na matriz interna, tudo fica normal, exceto o índice não está definido.

Se você fizer isso, você deve desativar $ newAppointment quando sair do loop. Aqui está a input relevante .

Usar referências em loops foreach está pedindo problemas 🙂 Eu fiz isso várias vezes, e eu sempre reescrevi esse código.

Você também deve. Como isso:

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

Embora eu tenha reescrito isso “mecanicamente”, então provavelmente não funcionará. Mas é para ter a idéia de como alcançar o mesmo efeito, sem os efeitos colaterais. Você ainda está modificando os arrays originais neste loop.