Optimalisatie van conversie naar array in PHP

Het is niet altijd nodig een string in een array op te splitsen om er iets mee te doen.

Laten we een voorbeeld bekijken. In het volgende voorbeeld controleert de code-auteur of de string het cijfer 3 bevat:

php<?php
  $str = '12345';
  $arr = explode('', $str); // splits in een array
  
  if (in_array(3, $arr)) {
    echo 'aanwezig';
  } else {
    echo 'afwezig';
  }
?>

De auteur is goed bezig - gebruikt ingebouwde PHP-functies in plaats van eigen omwegen te schrijven.

Maar de code is nog steeds niet optimaal: hier is het niet nodig de string in een array op te splitsen, aangezien er een kant-en-klare functie strpos bestaat die zoeken in een string uitvoert:

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

Waarom is het hier slecht om in een array op te splitsen? Omdat ten eerste het opsplitsen in een array processorbronnen kost, en ten tweede zal de resulterende array ruimte in het werkgeheugen innemen (meer dan de ruimte die de string zelf inneemt).

De moraal: splits een string niet in een array als er een manier is om dit niet te doen.

Задание 1

In de volgende code keert een programmeur de tekens in de string om. Optimaliseer de oplossing van deze programmeur:

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

In de volgende code zoekt iemand naar het aantal woorden in een tekst. Optimaliseer de oplossing van deze programmeur:

php<?php
  $str = 'aaa bbb ccc'; // een of andere lange string
  echo count(explode(' ', $str));
?>