Оптимизация на преобразуването в масив в PHP

Не винаги е необходимо да се разделя низ в масив, за да се направи нещо с него.

Нека разгледаме пример. В следващия пример авторът на кода проверява, дали в низа има цифра 3:

php<?php
  $str = '12345';
  $arr = explode('', $str); // разделяме в масив
  
  if (in_array(3, $arr)) {
    echo 'има';
  } else {
    echo 'няма';
  }
?>

Авторът е браво - използва вградените функции на PHP, вместо да пише собствени "криви решения".

Но кодът все пак не е оптимален: тук няма нужда да се разделя низ в масив, тъй като съществува готова функция strpos, която извършва търсене в низ:

php<?php
  $str = '12345';
  
  if (strpos(str, 3) !== false) {
    echo 'има';
  } else {
    echo 'няма';
  }
?>

Защо разделянето в масив е лошо тук? Защото, първо, за разделянето в масив се изразходват ресурси на процесора, второ, полученият масив ще заема място в оперативната памет (при това то ще бъде по-голямо от мястото, което заема самият низ).

Морал: не разделяйте низ в масив, ако има начин да не го правите.

Задание 1

В следващия код някой програмист обръща символите на низа в обратен ред. Оптимизирайте решението на този програмист:

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

В следващия код някой търси броя на думите в текст. Оптимизирайте решението на този програмист:

php<?php
  $str = 'aaa bbb ccc'; // някакъв дълъг низ
  echo count(explode(' ', $str));
?>