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<?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<?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.

Задание 1

Aşağıdaki kodda bir programcı, bir dizenin karakterlerini ters çeviriyor. Bu programcının çözümünü optimize edin:

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

Aşağıdaki kodda biri bir metindeki kelime sayısını arıyor. Bu programcının çözümünü optimize edin:

php<?php
  $str = 'aaa bbb ccc'; // uzun bir dize
  echo count(explode(' ', $str));
?>