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
$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
$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ä.
Seuraavassa koodissa joku ohjelmoija kääntää merkkijonon merkit käänteiseen järjestykseen. Optimoi tämän ohjelmoijan ratkaisu:
<?php
$str = '123345';
$rev = implode('', array_reverse(explode('', $str)));
echo $rev; // tulostaa '54321'
?>
Seuraavassa koodissa joku etsii sanojen määrää tekstistä. Optimoi tämän ohjelmoijan ratkaisu:
<?php
$str = 'aaa bbb ccc'; // jokin pitkä merkkijono
echo count(explode(' ', $str));
?>