Tablica to „zabójca wydajności”. Słychać tu i tam w odmętach Sieci. Smród pozostał ale od PHP 7 jest znaczny progres. Na przykład w systemach 64-bitowych jest 3,5 krotna poprawa wydajności a w 32-bitowych 2,5 krotna.
Dużo lepiej wypadają tablice klasy SplFixedArray. Są to tablice o stałym rozmiarze a jej indeksami mogą być tylko liczby całkowite. Można ich użyć, kiedy operujemy na dużych listach i znany jest ich rozmiar końcowy.
Przykład:
1 2 3 4 5 6 |
<?php $array = new SplFixedArray(10); for ($i = 0; $i < 10; $i++) { $array[$i] = $i; } print_r($array); |
Wyświetli obiekt SplFixedArray Object:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SplFixedArray Object ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 ) |
Każdą zwykłą tablicę można przekształcić w obiekt klasy SplFixedArray korzystając z metody fromArray:
1 2 3 4 |
<?php $array = [1 => 'html', 2 => 'php', 3 => 'js', 4 => 'c++', 5 => 'python']; $spl_array = SplFixedArray::fromArray($array); print_r($spl_array); |
Wyświetli:
1 2 3 4 5 6 7 8 9 |
SplFixedArray Object ( [0] => [1] => html [2] => php [3] => js [4] => c++ [5] => python ) |
Zauważ, że element 0 jest pusty dlatego, że nie został zdefiniowany. Można zignorować indeksy oryginalnej tablicy zapodając do funkcji fromArray parametr false:
1 2 |
<?php $spl_array = SplFixedArray::fromArray($array, false); |
Wyświetli:
1 2 3 4 5 6 7 8 |
SplFixedArray Object ( [1] => html [2] => php [3] => js [4] => c++ [5] => python ) |
W tablicach SplFixedArray nie można używać wbudowanych funkcji operujących typu: array_filter, array_sum, array_diff itd. Można ją skonwertować na zwykłą tablicę korzystając z metody toArray:
1 2 3 4 5 6 7 |
<?php $array = new SplFixedArray(10); for ($i = 0; $i < 10; $i++) { $array[$i] = $i; } $new_array = $array->toArray(); print_r($new_array); |
Wyświetli tablicę Array:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 ) |
Rozmiar tablicy SplFixedArray można zmodyfikować stosując metodę setSize:
1 2 3 4 5 6 7 8 |
<?php $array = new SplFixedArray(10); for ($i = 0; $i < 10; $i++) { $array[$i] = $i; } $array->setSize(20); $array[18] = 1024; print_r($array); |
Wyświetli:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
SplFixedArray Object ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 [10] => [11] => [12] => [13] => [14] => [15] => [16] => [17] => [18] => 1024 [19] => ) |
Więcej informacji o tablicach SplFixedArray na: php.net/manual/en/class.splfixedarray
Obrazek wyróżniający do posta: Chen