Muunnoksen optimointi taulukoksi PHP:ssä

Ei aina tarvitse pilkkoa merkkijonoa taulukoksi tehdäkseen jotain sen kanssa.

Katsotaanpa esimerkkiä. Seuraavassa esimerkissä koodin kirjoittaja tarkistaa, onko merkkijonossa numero 3:

php<?php
  $str = '12345';
  $arr = explode('', $str); // pilkotaan taulukoksi
  
  if (in_array(3, $arr)) {
    echo 'on';
  } else {
    echo 'ei';
  }
?>

Kirjoittaja on hieno - käyttää PHP:n sisäänrakennettuja funktioita sijaan, että kirjoittaisi omia kierteitä.

Mutta koodi ei silti ole optimaalinen: täällä ei tarvitse pilkkoa merkkijonoa taulukoksi, sillä on olemassa valmis funktio strpos, joka suorittaa haun merkkijonosta:

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

Miksi täällä pilkkominen taulukoksi on huono asia? Koska ensinnäkin, pilkkomiseen taulukoksi kuluu prosessoriresursseja, toiseksi, saatu taulukko vie tilaa keskusmuistista (muuten se on enemmän kuin tila, jota itse merkkijono vie).

Oppi: älä pilko merkkijonoa taulukoksi, jos on olemassa tapa olla tekemättä sitä.

Задание 1

Seuraavassa koodissa joku ohjelmoija kääntää merkkijonon merkit käänteiseen järjestykseen. Optimoi tämän ohjelmoijan ratkaisu:

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

Seuraavassa koodissa joku etsii sanojen määrää tekstistä. Optimoi tämän ohjelmoijan ratkaisu:

php<?php
  $str = 'aaa bbb ccc'; // jokin pitkä merkkijono
  echo count(explode(' ', $str));
?>