Masīva konvertēšanas optimizācija PHP

Ne vienmēr ir nepieciešams sadalīt virkni masīvā, lai ar to kaut ko izdarītu.

Apskatīsim piemēru. Nākamajā piemērā koda autors pārbauda, vai virknē ir cipars 3:

php<?php
  $str = '12345';
  $arr = explode('', $str); // sadalām masīvā
  
  if (in_array(3, $arr)) {
    echo 'ir';
  } else {
    echo 'nav';
  }
?>

Autors ir čempions - izmanto PHP iebūvētās funkcijas, tā vietā, lai rakstītu savus pastiprinājumus.

Bet kods joprojām nav optimāls: šeit nav vajadzības sadalīt virkni masīvā, jo pastāv iebūvēta funkcija strpos, kas veic meklēšanu virknē:

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

Kāpēc šeit sadalīšana masīvā ir slikta? Tāpēc ka, pirmkārt, sadalīšanai masīvā tiek tērēti procesora resursi, otrkārt, iegūtais masīvs aizņems vietu operatīvajā atmiņā (turklāt tā būs lielāka nekā vieta, ko aizņem pati virkne).

Moralite: nesadaliet virkni masīvā, ja ir iespējams to nedarīt.

Задание 1

Nākamajā kodā kāds programmētājs apgriež virknes simbolus apgrieztā secībā. Optimizējiet šī programmētāja risinājumu:

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

Nākamajā kodā kāds meklē vārdu skaitu tekstā. Optimizējiet šī programmētāja risinājumu:

php<?php
  $str = 'aaa bbb ccc'; // kāds garš virkne
  echo count(explode(' ', $str));
?>