Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: tworzenie tablic
Forum PHP.pl > Forum > PHP
zzeus
Witam,
może ktoś się orientuje czy jest jakaś różnica w wydajności jak chodzi o tworzenie tablic na dwa poniższe sposoby:
  1. $_arrTemp["val1"] = "val1";
  2. $_arrTemp["val2"] = "val2";
  3. $_arrTemp["val3"] = "val3";
  4. ...

  1. $_arrTemp = array(
  2. "val1" => "val1",
  3. "val2" => "val2",
  4. "val3" => "val3"
  5. );

Kocurro
Witaj,

Zawsze możesz samemu sprawdzić:

- w tym celu robisz pętlę powiedzmy 10000 iteracji
- zapisujesz czas przed iteracjami i po iteracjach
- wyznaczasz różnicę czasu

Pamiętam by eksperyment powtórzyć kilka/kilkanaście razy by zniwelować czynnik zewnętrzny. Otrzymane wyniki dobrze jest jakoś obrobić rozsądnie.

Pozdrawiam serdecznie,
Łukasz
darko
Wygrzebane z manuala w przykładach:
Cytat
If you are creating an array with a large number of static items, you will find serious performance differences between using the array() function and the $array[] construct. For example:
<?
// Slower method
$my_array = array(1, 2, 3, 500);

// Faster method
$my_array[] = 1;
$my_array[] = 2;
$my_array[] = 3;
$my_array[] = 500;
?>

[za:] http://php.net/manual/en/function.array.php
Tylko teraz kwestia czy podstawianie wartości pod konkretne klucze działa w podobny sposób, jak konstrukcja wstawiania kolejnego elementu? Inna sprawa, że przykład nie dotyczy tablic asocjacyjnych. Trzeba byłoby zerknąć w źródła i sprawdzić jaka jest różnica (jeśli w ogóle jakaś jest).
zzeus
Pokusiłem się o dwa testy:
  1. for($i = 0; $i < 10000; $i++)
  2. {
  3. $_arrTemp["val1"] = "val1";
  4. $_arrTemp["val2"] = "val2";
  5. $_arrTemp["val3"] = "val3";
  6. }
  7.  
  8. for($i = 0; $i < 10000; $i++)
  9. {
  10. $_arrTemp = array(
  11. "val1" => "val1",
  12. "val2" => "val2",
  13. "val3" => "val3"
  14. );
  15. }

w tym przypadku nieco szybsza jest metoda 1.

  1. for($i = 0; $i < 10000; $i++)
  2. {
  3. $_arrTemp[$i]["val1"] = "val1";
  4. $_arrTemp[$i]["val2"] = "val2";
  5. $_arrTemp[$i]["val3"] = "val3";
  6. }
  7.  
  8. for($i = 0; $i < 10000; $i++)
  9. {
  10. $_arrTemp[$i] = array(
  11. "val1" => "val1",
  12. "val2" => "val2",
  13. "val3" => "val3"
  14. );
  15. }

w tym przypadku szybsza jest metoda 2

Myślicie że te testy dają wiarygodne wyniki ?
masahuku
Myślę, że są wiarygodne ale... po co ? I tak i tak jest wydajnie, a do projektów gdzie taka subtelna różnica miałaby sens to nie mówilibyśmy o php smile.gif.

Myślę że w tym temacie ważniejsze jest co dla nas w konkretnym przypadku jest wygodniejsze.
zzeus
Cytat(masahuku @ 17.02.2010, 13:22:42 ) *
Myślę, że są wiarygodne ale... po co ?


Ciekawość smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.