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

Задание 1

V nasledujúcom kóde nejaký programátor otáča znaky reťazca v opačnom poradí. Optimalizujte riešenie tohto programátora:

php<?php
  $str = '123345';
  $rev = implode('', array_reverse(explode('', $str)));
  echo $rev; // vypíše '54321'
?>
Задание 2

V nasledujúcom kóde niekto hľadá počet slov v texte. Optimalizujte riešenie tohto programátora:

php<?php
  $str = 'aaa bbb ccc'; // nejaký dlhý reťazec
  echo count(explode(' ', $str));
?>