Optimering av konvertering till array i PHP

Det är inte alltid nödvändigt att dela upp en sträng i en array för att göra något med den.

Låt oss titta på ett exempel. I följande exempel kontrollerar kodförfattaren om strängen innehåller siffran 3:

php<?php
  $str = '12345';
  $arr = explode('', $str); // delar upp i en array
  
  if (in_array(3, $arr)) {
    echo 'finns';
  } else {
    echo 'saknas';
  }
?>

Författaren har gjort ett bra jobb - använder PHPs inbyggda funktioner istället för att skriva egna lösningar.

Men koden är ändå inte optimal: det finns inget behov av att dela upp strängen i en array, eftersom det finns en färdig funktion strpos som utför sökning i en sträng:

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

Varför är det dåligt att dela upp i en array här? För det första kräver uppdelningen till array processorkraft, för det andra kommer den resulterande arrayen att ta upp utrymme i arbetsminnet (och detta utrymme kommer att vara större än det utrymme som strängen själv upptar).

Slutsats: dela inte upp strängar i arrayer om det finns ett sätt att undvika det.

Задание 1

I följande kod vänder en programmerare om tecknen i en sträng. Optimera denna programmerares lösning:

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

I följande kod letar någon efter antalet ord i en text. Optimera denna programmerares lösning:

php<?php
  $str = 'aaa bbb ccc'; // en lång sträng
  echo count(explode(' ', $str));
?>