PHP - itérer sur les caractères de la chaîne

Est-il un bon moyen pour itérer sur les caractères d'une chaîne? J'aimerais être capable de faire foreach, array_map, array_walk, array_filter etc. sur les caractères d'une chaîne.

Type coulée/jonglage, na pas me faire n'importe où (à mettre l'ensemble de la chaîne comme un élément du tableau), et la meilleure solution que j'ai trouvé est tout simplement à l'aide d'une boucle for pour construire le tableau. Il se sent comme il doit y avoir quelque chose de mieux. Je veux dire, si vous pouvez l'index ne devriez-vous pas être en mesure d'effectuer une itération ainsi?

C'est le meilleur que j'ai

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);

Est là, soit:

A) Un moyen de rendre la chaîne d'itérable

B) Une meilleure façon de construire le tableau de caractères à partir de la chaîne (et si oui, comment au sujet de l'autre sens?)

Je me sens comme im manque quelque chose ici évidente.

  • Peut-être devriez vous en dire plus au sujet de ce que vous essayez d'accomplir... il semble qu'il pourrait y avoir une meilleure façon de le faire en utilisant la normale des opérations de chaîne.
  • n'avez pas un réel objectif. juste une curiosité j'ai été jouer avec. semblait bizarre que même si vous pouvez indice de chaînes de caractères, vous ne pouvez pas effectuer une itération. j'étais à une perte à même de penser que jusqu'exemple significatif utilise, mais je voudrais savoir si il est possible d'itérer sur les chaînes de caractères sans la construction d'un tableau de caractères explicitement
  • c'est un bon point même si, évidemment, mes exemples sont assez peu profonde. ie - pour la plupart tout ce que vous feriez avec array_filter dans ce sens pourrait être fait de mieux avec de la ficelle ou de reg-ex fonctions
  • La résolution de projecteuler.net/problem=20 peut-être un exemple (même si un peu artificiel) de cas d'utilisation.
  • une remarque, concernant for($i=0; $i<strlen($s); $i++) je voudrais stocker le strlen($s) dans une variable avant la boucle, de cette façon, vous n'aurez pas appeler strlen() plus de 1 heure
InformationsquelleAutor jon_darkstar | 2011-01-05