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

Задание 1

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

V následujícím kódu někdo hledá počet slov v textu. Optimalizujte řešení tohoto programátora:

php<?php
  $str = 'aaa bbb ccc'; // nějaký dlouhý řetězec
  echo count(explode(' ', $str));
?>