Есть ли хороший способ перебора символов строки? Я хочу, чтобы иметь возможность делать foreach
, array_map
, array_walk
, array_filter
и т. Д. На символах строки.PHP - итерация на строковых символах
Тип casting/juggling не получил меня нигде (поместите всю строку как один элемент массива), и лучшее решение, которое я нашел, просто использует цикл for для построения массива. Кажется, должно быть что-то лучше. Я имею в виду, если вы можете индексировать его, не должны ли вы также выполнять итерацию?
Это лучшее, что я получил
function stringToArray($s)
{
$r = array();
for($i=0; $i<strlen($s); $i++)
$r[$i] = $s[$i];
return $r;
}
$s1 = "textasstringwoohoo";
$arr = stringToArray($s1); //$arr now has character array
$ascval = array_map('ord', $arr); //so i can do stuff like this
$foreach ($arr as $curChar) {....}
$evenAsciiOnly = array_filter(function($x) {return ord($x) % 2 === 0;}, $arr);
Есть ли либо:
А) способ сделать строку итерации
B) лучшим способом для создания массива символов из строка (и если да, то как насчет другого направления?)
Я чувствую, что у меня что-то явно не видно.
Может быть, вы должны говорить больше о том, что вы пытаетесь сделать ... похоже, что может быть лучше сделать это с помощью обычных операций над строками. –
здесь нет настоящей цели. просто любопытство, с которым я играл. казалось странным, что даже если вы можете индексировать строки, которые вы не можете повторить. я был в недоумении даже придумывать осмысленный пример использования, но мне все же хотелось бы знать, есть ли какой-то способ итерации на строковых символах без конструирования массива символов explictly –
, что хорошо, хотя, очевидно, мои примеры довольно мелкие. т.е. в большинстве случаев все, что вы делали бы с 'array_filter' в этом смысле, могло бы быть лучше сделано с помощью строковых или рег-ex-функций. –