2009-08-18 9 views
37

Sto facendo un metodo in modo che la password abbia bisogno di almeno un captial e un simbolo o numero. Stavo pensando di dividere la stringa in per perdere caratteri e quindi utilizzare preggmatch per contare se contiene un capitale e un simbolo/numero.PHP: Suddividere una stringa in un array per il char char.

tuttavia ho fatto qualcosa di simile in script di azione ma non riesco a capire come questo viene chiamato in php. Non riesco a trovare un modo per mettere ogni carattere di una parola in un array.

esempio AS3

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

Grazie, Matthy

+2

Perché non utilizzare un'espressione regolare emissivamente –

+0

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

risposta

55

È possibile accedere a caratteri in stringhe nel allo stesso modo in cui si accede a un indice di array, ad es

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

Si potrebbe anche fare:

$thisWordCodeVerdeeld = str_split($string); 

Tuttavia si potrebbe trovare è più facile per convalidare la stringa come tutta una serie, per esempio usando le espressioni regolari.

+0

grazie per la correzione dell'ultima persona di passaggio :) – matthy

+0

Documentazione per la notazione delle parentesi quadre: http://php.net /manual/en/language.types.string.php#language.types.string.substr – Pang

+0

usa isset invece di strlen: 'for ($ i = 0; isset ($ stringa [$ i]); $ i ++) {' –

15

È possibile accedere a una stringa utilizzando [], come si fa per gli array:

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

questo non funziona correttamente per la stringa multibyte come: "éléphant". http://stackoverflow.com/questions/3666306/how-to-iterate-utf-8-string-in-php –

40

è possibile convertire una stringa matrice con str_split e utilizzando foreach

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

IMHO questo è il modo più bello. Potrebbe non essere il più veloce, ma per la maggior parte delle applicazioni non ha importanza. Nella nostra app, la differenza di velocità non era nemmeno possibile misurare. (Vs for-loop.) –

+1

la soluzione più pulita, grazie – Daniel

+1

Concorda anche che questa è la risposta migliore, poiché è la risposta più diretta alla domanda –

5

Poiché str_split() funzione non è multibyte sicuro, una soluzione facile per dividere UTF-8 stringa codificata è usare preg_split() con u (PCRE_UTF8) modificatore.

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

Una soluzione performante meno leggibile, ma meglio, quando l'iterazione di molte stringhe, potrebbe essere utilizzando isset di verificare la fine della stringa. Questo potrebbe essere più performanti perché isset è un costrutto del linguaggio e strlen è una funzione:

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

This question dovrebbe fornire più di fondo.