Optimering van omskakeling na 'n skikking in PHP

Dit is nie altyd nodig om 'n string te breek in 'n skikking nie, om iets daarmee te doen.

Kom ons kyk na 'n voorbeeld. In die volgende voorbeeld toets die outeur van die kode of die syfer 3 in die string voorkom:

php<?php
  $str = '12345';
  $arr = explode('', $str); // breek in 'n skikking
  
  if (in_array(3, $arr)) {
    echo 'is daar';
  } else {
    echo 'nie daar nie';
  }
?>

Die outeur is goed - gebruik PHP se ingeboude funksies in plaas daarvan om sy egen "workarounds" te skryf.

Maar die kode is steeds nie optimaal nie: daar is nie 'n behoefte om die string in 'n skikking te breek nie, want daar is 'n gereed funksie strpos wat soektog in 'n string doen:

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

Hoekom is dit sleg om hier in 'n skikking te breek? Omdat, eerste, dit vereis dat die CPU bronne spandeer om dit in 'n skikking te breek, tweedens, die gevolglike skikking sal ruimte in die RAM gebruik (en dit sal meer ruimte wees as wat die string self gebruik).

Die moreel: moenie 'n string in 'n skikking breek as daar 'n manier is om dit nie te doen nie.

Задание 1

In die volgende kode draai 'n programmeerder die karakters van die string in omgekeerde volgorde. Optimaliseer die oplossing van hierdie programmeerder:

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

In die volgende kode soek 'n iemand die aantal woorde in die teks. Optimaliseer die oplossing van hierdie programmeerder:

php<?php
  $str = 'aaa bbb ccc'; // 'n lang string
  echo count(explode(' ', $str));
?>