¿Hay alguna forma de iterar sobre los caracteres de una cadena? Me gustaría poder hacer foreach
, array_map
, array_walk
, array_filter
etc. en los caracteres de una cadena.PHP: iterar en los caracteres de cadena
El tipo de fundición/malabarismo no me llevó a ninguna parte (puse toda la cadena como un elemento de la matriz), y la mejor solución que he encontrado es simplemente usar un ciclo for para construir la matriz. Se siente como si hubiera algo mejor. Quiero decir, si puedes indexar, ¿no deberías poder iterar también?
Este es el mejor que tengo
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);
¿Hay ya sea:
A) Una manera de hacer que la cadena iterables
B) Una mejor manera de construir la matriz de caracteres de la cadena (y si es así, ¿qué tal la otra dirección?)
Siento que me falta algo obvio aquí.
tal vez debería decir más de que estamos tratando de lograr ... parece que puede haber una mejor manera de hacerlo utilizando las operaciones normales de cadena. –
no tiene un objetivo real aquí. solo una curiosidad con la que estaba jugando. Parecía extraño que, aunque puedes indexar cadenas, no puedes iterar. No podía ni siquiera pensar en ejemplos de uso significativos, pero aún me gustaría saber si hay alguna manera de iterar en los caracteres de cadenas sin construir una matriz de caracteres explícitamente –
, pero es un buen punto, obviamente mis ejemplos son bastante superficiales. es decir, casi todo lo que harías con 'array_filter' en este sentido se podría hacer mejor con las funciones de cadena o reg-ex –