Existe-t-il un moyen agréable d'itérer sur les caractères d'une chaîne de caractères ? J'aimerais pouvoir faire foreach
, array_map
, array_walk
, array_filter
etc. sur les caractères d'une chaîne de caractères.
Le casting/jonglage de type ne m'a mené nulle part (mettre la chaîne entière comme un élément du tableau), et la meilleure solution que j'ai trouvée est simplement d'utiliser une boucle for pour construire le tableau. J'ai l'impression qu'il devrait y avoir quelque chose de mieux. Je veux dire, si vous pouvez l'indexer, ne devriez-vous pas être capable d'itérer également ?
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-ce qu'il y a soit :
A) Un moyen de rendre la chaîne de caractères itérable
B) Une meilleure façon de construire le tableau de caractères à partir de la chaîne de caractères (et si oui, comment faire dans l'autre sens ?)
J'ai l'impression de rater quelque chose d'évident ici.
0 votes
Peut-être devriez-vous en dire plus sur ce que vous essayez d'accomplir... il semble qu'il y ait un meilleur moyen de le faire en utilisant les opérations normales sur les chaînes de caractères.
1 votes
Je n'ai pas de réel objectif ici. juste une curiosité avec laquelle je jouais. il me semblait bizarre que même si vous pouvez indexer sur des chaînes de caractères, vous ne pouvez pas itérer. je n'arrivais même pas à penser à des exemples d'utilisation significatifs, mais j'aimerais quand même savoir s'il y a un moyen d'itérer sur les caractères des chaînes de caractères sans construire un tableau de caractères explicitement.
0 votes
C'est un bon point cependant, évidemment mes exemples sont assez superficiels. c'est-à-dire - principalement tout ce que vous feriez avec
array_filter
dans ce sens, il serait préférable d'utiliser les fonctions string ou reg-ex.0 votes
Résolution du problème projecteuler.net/problem=20 pourrait être un exemple (bien que quelque peu artificiel) d'utilisation.
0 votes
Une remarque, concernant for($i=0 ; $i<strlen($s) ; $i++) je stockerais le strlen($s) dans une variable avant de boucler, de cette façon vous n'appellerez pas strlen() plus d'une fois.
0 votes
L'assainissement des chaînes de caractères est un bon exemple d'utilisation. Si vous voulez remplacer toutes les occurrences de '%' par '[%]', vous pouvez simplement utiliser str_replace. Mais si vous voulez remplacer toutes les occurrences de '[' par '[[]' et toutes les occurrences de ']' par '[]]', vous devrez itérer dans la chaîne pour tester chaque caractère afin d'éviter que les remplacements ne se chevauchent.