Dizine Dönüştürme Optimizasyonu PHP'de
Bir şeyler yapmak için bir dizeyi her zaman diziye bölmeye gerek yoktur.
Bir örneğe bakalım.
Aşağıdaki örnekte, kodun yazarı dizede
3 rakamının olup olmadığını kontrol ediyor:
<?php
$str = '12345';
$arr = explode('', $str); // diziye bölelim
if (in_array(3, $arr)) {
echo 'var';
} else {
echo 'yok';
}
?>
Yazar harika - kendi çözümlerini yazmak yerine PHP'nin yerleşik işlevlerini kullanıyor.
Ancak kod yine de optimal değil: burada dizeyi
bir diziye bölmeye gerek yok, çünkü dizide
arama yapan hazır bir strpos işlevi var:
<?php
$str = '12345';
if (strpos(str, 3) !== false) {
echo 'var';
} else {
echo 'yok';
}
?>
Neden burada diziye bölmek kötü? Çünkü, ilk olarak, diziye bölme işlemi işlemci kaynaklarını harcar, ikinci olarak, elde edilen dizi operatif bellekte yer kaplayacaktır (üstelik bu, dizenin kapladığı yerden daha fazla olacaktır).
Sonuç: Eğer yapmamanın bir yolu varsa, dizeyi diziye bölmeyin.
Aşağıdaki kodda bir programcı, bir dizenin karakterlerini ters çeviriyor. Bu programcının çözümünü optimize edin:
<?php
$str = '123345';
$rev = implode('', array_reverse(explode('', $str)));
echo $rev; // '54321' yazacak
?>
Aşağıdaki kodda biri bir metindeki kelime sayısını arıyor. Bu programcının çözümünü optimize edin:
<?php
$str = 'aaa bbb ccc'; // uzun bir dize
echo count(explode(' ', $str));
?>