2009-08-18 11 views
37

Estoy haciendo un método para que su contraseña necesite al menos una captura y un símbolo o número. Estaba pensando en dividir la cadena para perder caracteres y luego usar preggmatch para contar si contiene un capital y un símbolo/número.PHP: dividir una cadena en una matriz foreach char

Sin embargo, hice algo como esto en la secuencia de comandos de acción, pero no puedo averiguar cómo se llama en php. No puedo encontrar la forma de poner cada carbonilla de una palabra en una matriz.

ejemplo AS3

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

Gracias, Matthy

+2

Por qué no usar eméréxicamente emrex –

+0

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

Respuesta

55

Puede acceder a los caracteres en cadenas en el De la misma manera que accedería a un índice de matriz, por ejemplo

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

También puede hacer:

$thisWordCodeVerdeeld = str_split($string); 

Sin embargo, usted podría encontrar que es más fácil para validar la cadena como una cadena completa, por ejemplo, usando expresiones regulares.

+0

gracias por la corrección tu última respuesta :) – matthy

+0

Documentación para la notación de corchetes: http://php.net /manual/en/language.types.string.php#language.types.string.substr – Pang

+0

use isset en lugar de strlen: 'for ($ i = 0; isset ($ cadena [$ i]); $ i ++) {' –

15

Puede acceder a una cadena utilizando [], como lo hace para las matrices:

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

esto no funciona correctamente para cadenas multibyte como: 'éléphant'. http://stackoverflow.com/questions/3666306/how-to-iterate-utf-8-string-in-php –

40

se puede convertir una cadena en serie con str_split y utilizar foreach

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

En mi humilde opinión esta es la mejor manera. Puede que no sea el más rápido, pero para la mayoría de las aplicaciones no importa en absoluto. En nuestra aplicación, la diferencia de velocidad ni siquiera era posible de medir. (Vs for-loop.) –

+1

la solución más limpia, gracias – Daniel

+1

También estoy de acuerdo en que esta es la mejor respuesta, ya que es la respuesta más directa a la pregunta –

5

Desde str_split() función no se multibyte seguro, una solución fácil de dividir UTF-8 cadena codificada es utilizar preg_split() con u (PCRE_UTF8) modificador.

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

Una solución menos legible, pero con mejor rendimiento, cuando se itera sobre muchas cuerdas, podría estar utilizando isset comprobar el final de la cadena. Esto podría ser mejor rendimiento debido isset es una construcción del lenguaje y strlen es una función:

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

This question deberían proporcionar más antecedentes.

Cuestiones relacionadas