ThePhantom scrie:este slow
Cod: Selectaţi tot
$tmpData = count($some_array);
for ($i = 0; $i < $tmpData; $i++)
{
}
este mai rapid
mult mai rapid decat versiunile anterioare de cod.
Hmm ... eu stiam ca e cu count mai rapid, asa ca m-am luat sa fac niste teste.
Am facut un array pentru test:
Cod: Selectaţi tot
$array = array();
for($i=0;$i<100000;$i++){
$array[$i] = rand(0,15);
}
$array2 = $array;
$array3 = $array;
$array4 = $array;
$new_array = array();
$new_array2 = array();
$new_array3 = array();
Si apoi codurile:
count, fara instructiuni
Cod: Selectaţi tot
$count = count($array2);
for($i=0;$i<$count;++$i){
}
0.007409 sec
isset, fara instructiuni
0.007657 sec
count, cu instructiuni echo $i
Cod: Selectaţi tot
$count = count($array2);
for($i=0;$i<$count;++$i){
echo $i;
}
0.13779 sec
isset, cu instructiuni echo $i
0.14245 sec
count, cu new array
Cod: Selectaţi tot
$count = count($array2);
for($i=0;$i<$count;++$i){
$new_array[] = $i;
}
0.03195 sec
isset, cu new array
Cod: Selectaţi tot
for($i=0;isset($array3[$i]);++$i){
$new_array2[] = $i;
}
0.03234 sec
O problema ar fi daca dai unset undeva pe la jumatatea array-ului, isset o sa se opreasca acolo, iar count o sa continue dar o sa iti traga un notice in zona aia (si nu o sa ajunga la ultimul element).
Aparent cea mai buna solutie ramane while:
for count, cu new array
Cod: Selectaţi tot
$count = count($array2);
for($i=0;$i<$count;++$i){
$new_array[] = $array2[$i];
}
0.03009 sec
for isset, cu new array
Cod: Selectaţi tot
for($i=0;isset($array3[$i]);++$i){
$new_array2[] = $array3[$i];
}
0.03015 sec
while count, cu new array
Cod: Selectaţi tot
$count = count($array4);
$i = 0;
while($i<$count){
$new_array3[] = $array4[$i];
++$i;
}
0.02887 sec
while isset, cu new array
Cod: Selectaţi tot
$count = count($array4);
$i = 0;
while($i<$count){
$new_array3[] = $array4[$i];
++$i;
}
0.02899 sec
Ce e foarte util de retinut este ca $i++ este mai slow ca ++$i.
E posibil ca faptul ca generez un array mai sus sa influenteze rezultatele. De asta am incercat sa fac treaba cu $array2 si $array3, ca sa incerc sa-l fac sa uite ca are 100.000 de rezultate.
Ce vreau sa zic e ca ... cu isset o sa fie mult mai slow, pentru ca verifica la fiecare element daca e setat si daca nu e null, fata de count la care verifica la un rezultat daca un numar e mai mic ca altul.
Diferenta mare o sa fie faptul ca folosind count el stie deja cati itemi are array-ul.
Poti sa testezi si tu daca vrei. Timpii afisati de mine aici sunt timpi medii, calculati din 20 de load-uri, si folosesc cifre mari (100.000, 1.000.000) ca sa fie mai clare rezultatele.