Massiiviks teisendamise optimeerimine PHP-s
Alati ei ole vaja stringi massiiviks teisendada, et midagi sellega teha.
Vaatame näidet.
Järgmises näites kontrollib koodi autor,
kas stringis on number 3:
<?php
$str = '12345';
$arr = explode('', $str); // teisenda massiiviks
if (in_array(3, $arr)) {
echo 'on';
} else {
echo 'ei ole';
}
?>
Autor on tubli - kasutab PHP sisseehitatud funktsioone selle asemel, et kirjutada oma kooldunud lahendusi.
Kuid kood pole siiski optimaalne: siin pole
vaja stringi massiiviks teisendada, kuna on olemas
valmis funktsioon strpos, mis otsib
stringist:
<?php
$str = '12345';
if (strpos(str, 3) !== false) {
echo 'on';
} else {
echo 'ei ole';
}
?>
Miks on siin massiiviks teisendamine halb? Sest esiteks, massiiviks teisendamine kulutab protsessori ressursse, teiseks, saadud massiiv hõivab ruutu operatiivmälus (muide, rohkem ruutu, kui see, mida hõivab string ise).
Moraal: ärge teisendage stringi massiiviks, kui on võimalik seda mitte teha.
Järgmises koodis pöörab mingi programmeerija stringi sümbolid vastupidises järjekorras. Optimeerige selle programmeerija lahendust:
<?php
$str = '123345';
$rev = implode('', array_reverse(explode('', $str)));
echo $rev; // väljastab '54321'
?>
Järgmises koodis otsib keegi sõnade arvu tekstis. Optimeerige selle programmeerija lahendust:
<?php
$str = 'aaa bbb ccc'; // mingi pikk string
echo count(explode(' ', $str));
?>