Masīva konvertēšanas optimizācija PHP
Ne vienmēr ir nepieciešams sadalīt virkni masīvā, lai ar to kaut ko izdarītu.
Apskatīsim piemēru.
Nākamajā piemērā koda autors pārbauda,
vai virknē ir cipars 3:
<?php
$str = '12345';
$arr = explode('', $str); // sadalām masīvā
if (in_array(3, $arr)) {
echo 'ir';
} else {
echo 'nav';
}
?>
Autors ir čempions - izmanto PHP iebūvētās funkcijas, tā vietā, lai rakstītu savus pastiprinājumus.
Bet kods joprojām nav optimāls: šeit nav
vajadzības sadalīt virkni masīvā, jo pastāv
iebūvēta funkcija strpos, kas veic
meklēšanu virknē:
<?php
$str = '12345';
if (strpos(str, 3) !== false) {
echo 'ir';
} else {
echo 'nav';
}
?>
Kāpēc šeit sadalīšana masīvā ir slikta? Tāpēc ka, pirmkārt, sadalīšanai masīvā tiek tērēti procesora resursi, otrkārt, iegūtais masīvs aizņems vietu operatīvajā atmiņā (turklāt tā būs lielāka nekā vieta, ko aizņem pati virkne).
Moralite: nesadaliet virkni masīvā, ja ir iespējams to nedarīt.
Nākamajā kodā kāds programmētājs apgriež virknes simbolus apgrieztā secībā. Optimizējiet šī programmētāja risinājumu:
<?php
$str = '123345';
$rev = implode('', array_reverse(explode('', $str)));
echo $rev; // izvadīs '54321'
?>
Nākamajā kodā kāds meklē vārdu skaitu tekstā. Optimizējiet šī programmētāja risinājumu:
<?php
$str = 'aaa bbb ccc'; // kāds garš virkne
echo count(explode(' ', $str));
?>