Optimalizácia prevodu na pole v PHP
Nie vždy je potrebné rozdeliť reťazec na pole, aby sme s ním niečo urobili.
Pozrime sa na príklad.
V nasledujúcom príklade autor kódu kontroluje,
či sa v reťazci nachádza číslica 3:
<?php
$str = '12345';
$arr = explode('', $str); // rozdelíme na pole
if (in_array(3, $arr)) {
echo 'je';
} else {
echo 'nie';
}
?>
Autor je šikovný - používa vstavané funkcie PHP, namiesto toho, aby písal vlastné kôli.
Ale kód stále nie je optimálny: tu nie je
potrebné rozdeliť reťazec na pole, pretože existuje
hotová funkcia strpos, ktorá vykonáva
vyhľadávanie v reťazci:
<?php
$str = '12345';
if (strpos(str, 3) !== false) {
echo 'je';
} else {
echo 'nie';
}
?>
Prečo je tu rozdelenie na pole zlé? Pretože po prvé, na rozdelenie na pole sa míňajú prostriedky procesora, po druhé, výsledné pole bude zaberať miesto v operačnej pamäti (a to bude väčšie, ako miesto, ktoré zaberá samotný reťazec).
Ponaučenie: nerozdeľujte reťazec na pole, ak existuje spôsob, ako sa tomu vyhnúť.
V nasledujúcom kóde nejaký programátor otáča znaky reťazca v opačnom poradí. Optimalizujte riešenie tohto programátora:
<?php
$str = '123345';
$rev = implode('', array_reverse(explode('', $str)));
echo $rev; // vypíše '54321'
?>
V nasledujúcom kóde niekto hľadá počet slov v texte. Optimalizujte riešenie tohto programátora:
<?php
$str = 'aaa bbb ccc'; // nejaký dlhý reťazec
echo count(explode(' ', $str));
?>