PHP dizi referanslarla beklenmedik davranış

2 Cevap php

Ben bir dizi değiştirmek için başvurular kullanıyorum:

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

	$counter++;
}

Ben dizi içeriğini yazdırmak, sonra ben beklenen sonuç alırsınız. Ben bunun üzerinde yineleme, tüm elemanları (ilk) aynı gibi görünüyor.

Ben iç dizide referans operatörü & kaldırdığınızda, tüm endeks dışında, normal bir gider ayarlı değil.

2 Cevap

Bunu yaparsanız döngü çıktığınızda, size $ newAppointment unset. İşte relevant entry olduğunu.

Foreach döngülerinde başvurularını kullanma belaya :) Ben birkaç kez, ve ben her zaman bu kodu yeniden yazdı yaptık.

Siz de buna gerekir. Bu gibi:

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

Ben sadece "mekanik" olarak yeniden yazılması olsa da, bu yüzden muhtemelen işe yaramayacak. Ama yan etkisi olmadan, aynı etkiyi elde etmek için nasıl bir fikir almak için bu. Hala bu döngü içinde orijinal diziler değiştiriyorsunuz.