2009-08-18 4 views
37

Ich mache eine Methode, so dass Ihr Passwort mindestens ein Captial und ein Symbol oder eine Nummer benötigt. Ich dachte daran, die Zeichenfolge zu spalten, um Zeichen zu verlieren, und dann preggmatch zu verwenden, um zu zählen, wenn sie ein Groß- und ein Symbol/eine Zahl enthält.PHP: Split eine Zeichenfolge in einem Array foreach char

aber ich habe so etwas in Action-Skript, aber kann nicht herausfinden, wie dies in PHP genannt wird. Ich kann keinen Weg finden, jedes Char eines Wortes in einem Array zu platzieren.

AS3 Beispiel

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

Danke, Matthy

+2

Warum verwenden Sie kein regex emidiately –

+0

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

Antwort

55

Sie Zeichen in Strings in der Zugriff auf genauso wie Sie auf einen Array-Index zugreifen würden, z

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

Sie könnten auch tun:

$thisWordCodeVerdeeld = str_split($string); 

aber Sie finden es einfacher ist, die Zeichenfolge als eine ganze Reihe zu validieren, z.B. Verwenden regulärer Ausdrücke.

+0

danke für die Korrektur Sie zuletzt awnser :) – matthy

+0

Dokumentation für eckige Klammern Notation: http://php.net /manual/en/language.types.string.php#language.types.string.sub – Pang

+0

Verwenden Sie isset statt strlen: 'for ($ i = 0; isset ($ string [$ i]); $ i ++) {' –

15

Sie einen String [] zugreifen können, wie Sie für Arrays tun:

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

das funktioniert nicht richtig für Multibyte-String wie: 'éléphant'. http://stackoverflow.com/questions/3666306/how-to-iterate-utf-8-string-in-php –

40

Sie einen String in Array mit str_split umwandeln und verwenden foreach

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

IMHO das ist der schönste Weg. Es ist vielleicht nicht die schnellste, aber für die meisten Anwendungen spielt es überhaupt keine Rolle. In unserer App war der Geschwindigkeitsunterschied gar nicht messbar. (Vs for-loop.) –

+1

die sauberste Lösung, danke – Daniel

+1

Auch stimme zu, dass dies die bessere Antwort ist, da es die Frage direkt beantworten –

5

Da str_split() Funktion nicht sicher ist multibyte, eine einfache Lösung UTF-8 kodierten String preg_split() mit u (PCRE_UTF8) Modifikator aufzuspalten zu verwenden ist.

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

Eine weniger lesbar, aber leistungsfähigere Lösung, wenn sie über viele Strings iterieren, könnte isset werden mit dem Ende der Zeichenfolge zu überprüfen. Dies könnte eine bessere Leistung, weil isset ein Sprachkonstrukt und strlen ist eine Funktion:

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

This question sollte mehr Hintergrund liefern.