php5: Bir foreach Krediye yükü için bir dizi 'kopya' yok?

3 Cevap php

(Bu durumda PHP5,) bir foreach için bir dizi 'kopya' bu bir yazma manipülasyon tespit ederse sadece havai üreten gerçek yükü, ya da sadece tembel bir kopyasını (yazıp kopyalama) ile acil bir kopyası mı?

Nasıl gerçekten hızlı olabilir - çeşitli yerlerde alternatif, not, ($ dizi) tuşlarının üzerinde foreach çalıştırmak için?

3 Cevap

Tamam, bu yüzden gitti ve o ölçülür -

Test This                    And This                       And, uh, This      
---------------------------  ----------------------------   ----------------------------
Setup                        Setup                          Setup                     
---------------------------- ----------------------------   ----------------------------
$i = array_fill(0,1000,'1'); $j = array_fill(0,1000,'1');   $j = array_fill(0,1000,'1');
$c = 0;                      $d = 0;                        $e = 0;
---------------------------  ----------------------------   ---------------------------
Code Under Test              Code Under Test                Code Under Test                    
---------------------------  ------------------------------ --------------------------
foreach ($i as $v)           foreach (array_keys($j) as $k) foreach ($i as &$v)
{ $c+= $v; }                 { $d+= $j[$k]; }               { $e+= $v; }    
---------------------------  ------------------------------ -------------------------
Tear Down                    Tear Down                      Tear Down                          
---------------------------  -----------------------------  -------------------------
print "c = $c";             print "d = $d"; 	            print "e = $e";                    
---------------------------- -----------------------------  --------------------------
Test for repetitions.  10000         
---------------------------- -----------------------------  -------------------------
c = 10000000                 d = 10000000                   e = 10000000
---------------------------- -----------------------------  -------------------------
Ran in  1.8540189266205      Ran in 4.0039160251617         Ran in 1.9633851051331
---------------------------  -----------------------------  -------------------------
Winner -0.10936617851257     Looser 2.0405309200287         2nd Best             0
---------------------------  ----------------------------  -------------------------

Foreach (v $ olarak $ a) benziyor dizini 'keys'e çok daha iyi olduğunu ve bu kullanarak ve v ortasında.

PHP üzerine kopyalama-yazma kullanır. Bu kurulum veri yapıları referans korumak zorundadır, çünkü referans olarak geçmek yavaştır.

Tamam, burada istenen diğer karşılaştırma (sen ne düşünüyorsun?)

Test This                                 And This                            
---------------------------------------   --------------------------------------
Setup                                     Setup                               
--------------------------------------    --------------------------------------
$k = array_fill(0,1000,'1');              $i = array_fill(0,1000,'1');        
$f = 0;                                   $c = 0;                             
$kMax = count($k);                                                            
--------------------------------------    --------------------------------------
Code Under Test                           Code Under Test                     
--------------------------------------    --------------------------------------
for ($x = 0; $x < kiMax; $x++)            foreach ($i as $v)                  
{ $f+= $k[$x]; }                          { $c+= $v; }                        
--------------------------------------    --------------------------------------
Tear Down                                 Tear Down                           
--------------------------------------    --------------------------------------
print "f = $f";                           print "c = $c"; 	                   
--------------------------------------    --------------------------------------
Test for repetitions:  10,000
--------------------------------------    --------------------------------------
f = 10000000                              c = 10000000
--------------------------------------    --------------------------------------
Ran in 2.8563051223755                    Ran in 1.8667521476746
--------------------------------------    -------------------------------------
2nd best      0.98955297470093            Winner               0