Optymalizacja konwersji na tablicę w PHP

Nie zawsze trzeba dzielić ciąg znaków na tablicę, aby coś z nim zrobić.

Spójrzmy na przykład. W następnym przykładzie autor kodu sprawdza, czy w ciągu znaków znajduje się cyfra 3:

php<?php
  $str = '12345';
  $arr = explode('', $str); // podzielimy na tablicę
  
  if (in_array(3, $arr)) {
    echo 'jest';
  } else {
    echo 'nie ma';
  }
?>

Autor jest świetny - używa wbudowanych funkcji PHP, zamiast pisać własne obejścia.

Ale kod nadal nie jest optymalny: tutaj nie ma potrzeby dzielenia ciągu na tablicę, ponieważ istnieje gotowa funkcja strpos, która wykonuje wyszukiwanie w ciągu znaków:

php<?php
  $str = '12345';
  
  if (strpos(str, 3) !== false) {
    echo 'jest';
  } else {
    echo 'nie ma';
  }
?>

Dlaczego dzielenie na tablicę jest tutaj złe? Ponieważ po pierwsze, na podział na tablicę zużywane są zasoby procesora, po drugie, otrzymana tablica będzie zajmować miejsce w pamięci operacyjnej (a będzie jej więcej niż miejsce zajmowane przez sam ciąg znaków).

Morał: nie dziel ciągu znaków na tablicę, jeśli istnieje sposób, aby tego nie robić.

Задание 1

W następnym kodzie pewien programista odwraca znaki ciągu w odwrotnej kolejności. Zoptymalizuj rozwiązanie tego programisty:

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

W następnym kodzie pewien programista szuka liczby słów w tekście. Zoptymalizuj rozwiązanie tego programisty:

php<?php
  $str = 'aaa bbb ccc'; // jakiś długi ciąg znaków
  echo count(explode(' ', $str));
?>