PHPにおける配列変換の最適化

文字列に対して何かを行うために、常に配列に分割する必要はありません。

例を見てみましょう。 次の例では、コードの著者が文字列内に数字 3 が含まれているかチェックしています:

php<?php
  $str = '12345';
  $arr = explode('', $str); // 配列に分割
  
  if (in_array(3, $arr)) {
    echo '含まれる';
  } else {
    echo '含まれない';
  }
?>

著者は素晴らしい - 独自の不完全な解決策を書く代わりに、 PHPの組み込み関数を使用しています。

しかし、コードは依然として最適ではありません:ここでは文字列を配列に分割する必要はありません。 なぜなら、文字列内を検索する既製の関数 strpos が存在するからです:

php<?php
  $str = '12345';
  
  if (strpos($str, '3') !== false) {
    echo '含まれる';
  } else {
    echo '含まれない';
  }
?>

なぜここで配列に分割することが悪いのでしょうか?なぜなら、 第一に、配列への分割にはプロセッサリソースが消費され、 第二に、得られた配列はRAM内に場所を占有するからです (しかも、その占有量は元の文字列が占める場所よりも大きくなります)。

教訓:それを避ける方法があるなら、文字列を配列に分割しないでください。

Задание 1

次のコードでは、あるプログラマーが文字列の文字を逆順に並べ替えています。 このプログラマーの解決策を最適化してください:

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

次のコードでは、あるプログラマーがテキスト内の単語数を探しています。 このプログラマーの解決策を最適化してください:

php<?php
  $str = 'aaa bbb ccc'; // ある長い文字列
  echo count(explode(' ', $str));
?>