Это задача — классика алгоритмов. В каждом языке программирования есть свои особенности.
Для паскаля, к примеру, строка — это массив символов, потому можно сказать, что задача решена уже по определению. Для PHP один из вариантов решения задачи можно найти в документации — откройте описание функции preg_split().
1 2 3 4 5 |
<?php $str = 'string'; $chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY); print_r($chars); ?> |
Этот пример не работает для UTF-8 символов, но это легко исправить:
1 |
$chars = preg_split('//u', $str, NULL, PREG_SPLIT_NO_EMPTY); |
Изящное и быстродействующее решение, несмотря на использование функции, работающей с регулярным выражением. Назовем его Алгоритм 1.
Я сравнивал быстродействие вот с такой конструкцией, использующей функции работы с много-байтовыми строками (пусть это будет Алгоритм 2):
1 2 3 4 |
$len = mb_strlen($str); $chars = array(); for ($k = 0; $k < $len; $k++) $chars[] = mb_substr($str, $k, 1); |
Для коротких строк (у меня в тестах до 40-45 символов) алгоритм 2 выигрывает немного в быстродействии. Потом пальму первенства выхватывает алгоритм 1.
По оси OХ — длина строки (в символах), по оси OY — время вычисления (в секундах).
Спасибо!
Кратко и понятно.
Пример для UTF-8 вызывает ошибку 500, не знаю как это объяснить, там нет пробелов при просмотре скрытых символов, если их добавить, то работает.