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<?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<?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.

Задание 1

Järgmises koodis pöörab mingi programmeerija stringi sümbolid vastupidises järjekorras. Optimeerige selle programmeerija lahendust:

php<?php
  $str = '123345';
  $rev = implode('', array_reverse(explode('', $str)));
  echo $rev; // väljastab '54321'
?>
Задание 2

Järgmises koodis otsib keegi sõnade arvu tekstis. Optimeerige selle programmeerija lahendust:

php<?php
  $str = 'aaa bbb ccc'; // mingi pikk string
  echo count(explode(' ', $str));
?>