2009-08-18 4 views
37

Je fais une méthode afin que votre mot de passe a besoin d'au moins un captial et un symbole ou un nombre. Je pensais diviser la chaîne pour perdre des caractères, puis utiliser preggmatch pour compter si elle contient un capital et un symbole/numéro. Cependant, j'ai fait quelque chose comme ça dans le script d'action, mais je ne peux pas comprendre comment cela s'appelle en PHP. Je ne peux pas trouver un moyen de mettre chaque char d'un mot dans un tableau.PHP: Split une chaîne dans un tableau foreach char

exemple AS3

for(var i:uint = 0; i < thisWordCode.length -1 ; i++) 
{ 
    thisWordCodeVerdeeld[i] = thisWordCode.charAt(i); 
    //trace (thisWordCodeVerdeeld[i]); 
} 

Merci, Matthy

+2

Pourquoi ne pas utiliser une expression régulière –

+0

http://php.net/manual/fr/function.str-split.php – hakre

Répondre

55

Vous pouvez accéder aux caractères dans les chaînes dans la de la même manière que vous auriez accès à un index de tableau, par exemple

$length = strlen($string); 
$thisWordCodeVerdeeld = array(); 
for ($i=0; $i<$length; $i++) { 
    $thisWordCodeVerdeeld[$i] = $string[$i]; 
} 

Vous pouvez également faire:

$thisWordCodeVerdeeld = str_split($string); 

Cependant, vous trouverez peut-être qu'il est plus facile de valider la chaîne comme une chaîne entière, par exemple en utilisant des expressions régulières.

+0

Merci pour la dernière correction que vous avez faite :) – matthy

+0

Documentation pour la notation en carré: http://php.net /manual/en/language.types.string.php#language.types.string.substr – Pang

+0

use isset au lieu de strlen: 'pour ($ i = 0; isset ($ string [$ i]); $ i ++) {' –

15

Vous pouvez accéder à une chaîne en utilisant [], comme vous le faites pour les tableaux:

$stringLength = strlen($str); 
for ($i = 0; $i < $stringLength; $i++) 
    $char = $str[$i]; 
+1

cela ne fonctionne pas correctement pour une chaîne multi-octets comme: 'éléphant'. http://stackoverflow.com/questions/3666306/how-to-iterate-utf-8-string-in-php –

40

vous pouvez convertir une chaîne en tableau avec str_split et utiliser foreach

$chars = str_split($str); 
foreach($chars as $char){ 
    // your code 
} 
+2

IMHO c'est le meilleur moyen. Ce n'est peut-être pas le plus rapide, mais pour la plupart des applications, cela n'a pas d'importance. Dans notre application, la différence de vitesse n'était même pas possible de mesurer. (Vs pour-boucle.) –

+1

la solution la plus propre, merci – Daniel

+1

Également d'accord que c'est la meilleure réponse, puisque c'est la réponse plus directe à la question –

5

Puisque la fonction str_split() ne MultiByte sûr, une solution facile à diviser chaîne codée en UTF-8 est d'utiliser preg_split() avec modificateur u (PCRE_UTF8).

preg_split('//u', $str, null, PREG_SPLIT_NO_EMPTY) 
1

A moins lisible, mais une meilleure solution performante, quand itérer sur de nombreuses chaînes, peut-être utiliser isset pour vérifier la fin de la chaîne. Cela pourrait être plus performant car isset est une construction linguistique et strlen est une fonction:

for ($i = 0; isset($value[$i]); $i++) { 
    "do something here" 
} 

This question devrait donner plus d'informations.

Questions connexes