PHP - Foreach döngüler ve kaynakların bulunduğu,

4 Cevap php

I'm using a foreach loop to process a large set of items, unfortunately it's using alot of memory. (probably because It's doing a copy of the array). Apparently there is a way to save some memory with the following code: $items = &$array;

Bu for yerine döngüler kullanmak daha iyi değil midir?

Ve kısa sürede bir foreach döngüsü içinde işlenmiş gibi her öğeyi yok etmek için bir yol var.

örn.

    $items = &$array;
    foreach($items as $item)
    {
     dosomethingwithmy($item);
     destroy($item);
    }

Ben sadece ressources tükeniyor olmadan öğeleri bir sürü işlemek için en iyi yol arıyorum.

4 Cevap

Bir for döngü deneyin:

$keys = array_keys($array);
for ($i=0, $n=count($keys); $i<$n; ++$i) {
    $item = &$array[$keys[$i]];
    dosomethingwithmy($item);
    destroy($item);
}

Eğer döngü için kullanırsanız kaynak-bilge, kodunuz yerine foreach döngü, daha verimli olacaktır. Lütfen foreach döngü her yineleme zaman ve bellek alacağı, bellekte mevcut öğe kopyalamak olacaktır. Için kullanılması ve bir indeks ile geçerli öğeyi erişen biraz daha iyi ve daha hızlı.

Bu kullanabilirsiniz:

reset($array);
while(list($key_d, $val_d) = each($array)){

}

foreach bir kopyasını oluşturmak için

Bir veritabanından ayarladığınız büyük veri alıyorsanız, genellikle kısa sürede veritabanından gelir olarak ayarlanmış verileri denemek ve tüketmek için yardımcı olabilir. Php mysql_fetch_array belgeler örneğin.

$resource = mysql_query("query");
while ($row = mysql_fetch_array($resource, MYSQL_NUM)) {
    process($row);
}

Bu döngü, tüm kümesi (en azından yedekli) bellek kopyasında bir oluşturmak değildir. Bir arkadaşım bu tekniği (onu gerçekleştirmede biyolojik, bu yüzden oldukça büyük alabilirsiniz) kullanılarak 10x onu sorgu işleme bazı hızlandırdı.