PHP kapsamı soru

1 Cevap php

Bu döngü içinde, ben kayıtları başka bir dizi (her personel için randevular) döndüren bir işlevi çağırmak, kayıtların (personel) bir dizi bakmaya çalışıyorum.

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

Bu Tamam çalışıyor, ancak, daha sonra komut dosyası, ancak onlar kullanılamaz, bu kez randevu dizilerin yararlanarak, yeniden kayıtlar döngü gerekir.

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

Normalde, ben aynı sql sorgusu 168 kez çalıştırmak için, hangi neden ancak bu döngü zaten iki başkaları içinde yuvalanmış, saniye içinde, ilk döngü işlevini gerçekleştirmek olacaktır.

Herkes bir çözüm önerebilir misiniz?

Herhangi bir tavsiye büyük mutluluk duyacağız.

Teşekkürler

1 Cevap

foreach iterates over a copy dizinin. Eğer değerini değiştirmek isterseniz, reference bunu gerekir:

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

Belgeleri:

Dizi başvurulan sürece Note:, foreach belirtilen dizinin bir kopyası değil, dizinin kendisi üzerinde çalışır. foreach dizisi işaretçisi üzerinde bazı yan etkileri vardır. Sıfırlayarak olmadan foreach sırasında veya sonrasında dizi işaretçisi güvenmeyin.

ve

PHP 5 itibariyle, kolayca & ile $value önceki tarafından dizinin öğelerini değiştirebilirsiniz. Bu reference yerine değeri kopyalamak atar.