Optimalizace převodu na pole v PHP
Není vždy nutné rozdělit řetězec na pole, abychom s ním něco udělali.
Podívejme se na příklad.
V následujícím příkladu autor kódu kontroluje,
zda řetězec obsahuje číslici 3:
<?php
$str = '12345';
$arr = explode('', $str); // rozdělíme na pole
if (in_array(3, $arr)) {
echo 'ano';
} else {
echo 'ne';
}
?>
Autor je šikovný - používá vestavěné funkce PHP, místo toho, aby psal vlastní provizorní řešení.
Ale kód stále není optimální: zde není
potřeba rozdělovat řetězec na pole, protože existuje
hotová funkce strpos, která provádí
vyhledávání v řetězci:
<?php
$str = '12345';
if (strpos(str, 3) !== false) {
echo 'ano';
} else {
echo 'ne';
}
?>
Proč je zde špatné rozdělení na pole? Protože za prvé, na rozdělení na pole se spotřebovávají prostředky procesoru, za druhé, výsledné pole bude zabírat místo v operační paměti (a to bude více, než místo, které zabírá samotný řetězec).
Poučení: nerozdělujte řetězec na pole, pokud existuje způsob, jak se tomu vyhnout.
V následujícím kódu nějaký programátor obrací znaky řetězce v opačném pořadí. Optimalizujte řešení tohoto programátora:
<?php
$str = '123345';
$rev = implode('', array_reverse(explode('', $str)));
echo $rev; // vypíše '54321'
?>
V následujícím kódu někdo hledá počet slov v textu. Optimalizujte řešení tohoto programátora:
<?php
$str = 'aaa bbb ccc'; // nějaký dlouhý řetězec
echo count(explode(' ', $str));
?>