Optymalizacja konwersji na tablicę w PHP
Nie zawsze trzeba dzielić ciąg znaków na tablicę, aby coś z nim zrobić.
Spójrzmy na przykład.
W następnym przykładzie autor kodu sprawdza,
czy w ciągu znaków znajduje się cyfra 3:
<?php
$str = '12345';
$arr = explode('', $str); // podzielimy na tablicę
if (in_array(3, $arr)) {
echo 'jest';
} else {
echo 'nie ma';
}
?>
Autor jest świetny - używa wbudowanych funkcji PHP, zamiast pisać własne obejścia.
Ale kod nadal nie jest optymalny: tutaj nie ma
potrzeby dzielenia ciągu na tablicę, ponieważ istnieje
gotowa funkcja strpos, która wykonuje
wyszukiwanie w ciągu znaków:
<?php
$str = '12345';
if (strpos(str, 3) !== false) {
echo 'jest';
} else {
echo 'nie ma';
}
?>
Dlaczego dzielenie na tablicę jest tutaj złe? Ponieważ po pierwsze, na podział na tablicę zużywane są zasoby procesora, po drugie, otrzymana tablica będzie zajmować miejsce w pamięci operacyjnej (a będzie jej więcej niż miejsce zajmowane przez sam ciąg znaków).
Morał: nie dziel ciągu znaków na tablicę, jeśli istnieje sposób, aby tego nie robić.
W następnym kodzie pewien programista odwraca znaki ciągu w odwrotnej kolejności. Zoptymalizuj rozwiązanie tego programisty:
<?php
$str = '123345';
$rev = implode('', array_reverse(explode('', $str)));
echo $rev; // wypisze '54321'
?>
W następnym kodzie pewien programista szuka liczby słów w tekście. Zoptymalizuj rozwiązanie tego programisty:
<?php
$str = 'aaa bbb ccc'; // jakiś długi ciąg znaków
echo count(explode(' ', $str));
?>