Оптимизация преобразования в массив в 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));
?>