Optimizacija pretvorbe v matriko v PHP
Ni vedno potrebno razbiti niz v matriko, da bi nekaj naredili z njim.
Poglejmo si primer.
V naslednjem primeru avtor kode preverja,
ali v nizu obstaja številka 3:
<?php
$str = '12345';
$arr = explode('', $str); // razbijemo v matriko
if (in_array(3, $arr)) {
echo 'obstaja';
} else {
echo 'ne';
}
?>
Avtor je odličen - uporablja vgrajene funkcije PHP, namesto da bi pisal svoje rešitve.
Vendar koda še vedno ni optimalna: tukaj ni
potrebe po razbijanju niza v matriko, saj obstaja
vnaprej pripravljena funkcija strpos, ki izvaja
iskanje po nizu:
<?php
$str = '12345';
if (strpos(str, 3) !== false) {
echo 'obstaja';
} else {
echo 'ne';
}
?>
Zakaj je razbijanje v matriko tukaj slabo? Ker se, prvič, za razbijanje v matriko porabijo viri procesorja, drugič, bo nastala matrika zasedala prostor v operativnem spominu (in to več prostora, kot ga zaseda sam niz).
Naulek: ne razbijajte niza v matriko, če obstaja način, da tega ne storite.
V naslednji kodi neki programer obrne simbole niza v vrstnem redu. Optimizirajte rešitev tega programerja:
<?php
$str = '123345';
$rev = implode('', array_reverse(explode('', $str)));
echo $rev; // izpiše '54321'
?>
V naslednji kodi neki programer išče število besed v besedilu. Optimizirajte rešitev tega programerja:
<?php
$str = 'aaa bbb ccc'; // nek dolg niz
echo count(explode(' ', $str));
?>