PHPда массивга айлантиришни оптимизациялаш
Ҳар доим сатрни массивга ажратиш шарт эмас, уни бирон нарса билан қилиш учун.
Келинг, мисол билан кўрайлик.
Куйидаги мисолда код муаллифи сатрда
3 рақами бор-йўқлигини текширмокда:
<?php
$str = '12345';
$arr = explode('', $str); // массивга ажратамиз
if (in_array(3, $arr)) {
echo 'бор';
} else {
echo 'йўқ';
}
?>
Муаллиф яхши иш қилган - ўз костылларини ёзиш ўрнига PHPнинг ички функцияларидан фойдаланган.
Аммо код баробари оптимал эмас: бу ерда
сатрни массивга ажратишга ҳожат йўқ, чунки
strpos функцияси мавжуд бўлиб, у
сатр бўйлаб излаш амалиётини бажаради:
<?php
$str = '12345';
if (strpos(str, 3) !== false) {
echo 'бор';
} else {
echo 'йўқ';
}
?>
Нега бу ерда массивга ажратиш ёмон? Чунки, биринчи навбатда, массивга ажратиш учун процессор ресурслари сарфланади, иккинчидан, олинган массив оператив хотирада жой олади (ва у сатр ўзи эгаллаган жойдан кўра кўпроқ жойни эгаллаши мумкин).
Одоб: агар қилмасликнинг имкони бўлса, сатрни массивга ажратмангиз.
Куйидаги кодда бир программачи сатрнинг символларини тескари тартибда айлантирмокда. Ушбу программачининг ечимини оптимизацияланг:
<?php
$str = '123345';
$rev = implode('', array_reverse(explode('', $str)));
echo $rev; // '54321' чиқади
?>
Куйидаги кодда бир программачи матндаги сўзлар сонини изламокда. Ушбу программачининг ечимини оптимизацияланг:
<?php
$str = 'aaa bbb ccc'; // бир узун сатр
echo count(explode(' ', $str));
?>