2010-09-22 21 views
36

En PHP, ¿cuál es la forma más sencilla de devolver la parte de una cadena antes de la primera aparición de un carácter específico?Devuelve la parte de una cadena antes de la primera aparición de un carácter en php

Por ejemplo, si tengo una cadena ...

"El marrón rápido foxed saltado por encima del etc, etc"

... y estoy de filtrado para un carácter de espacio (" "), la función devolvería 'El'

Gracias!

+0

Usted puede encontrar [ 's ($ str) -> beforeFirst (' ')'] (https : //github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L389) útil, como se encuentra en [esta biblioteca independiente] (https://github.com/delight-im/ PHP-Str). – caw

Respuesta

50

Usted podría hacer esto:

$string = 'The quick brown fox jumped over the lazy dog'; 
$substring = substr($string, 0, strpos($string, ' ')); 

pero me gusta este mejor:

list($firstWord) = explode(' ', $string); 
+0

¿Eso no arrojaría errores? Pensé que el enlace tenía que tener un conjunto vairable coincidente (o una coma vacía delimitada) para el número de variables en la matriz que está explotando. – Alex

+1

en caso de que quiera devolver la variable en lugar de asignarla 'return array_shift (explode ('', $ string));' –

+2

Si no se encuentra la cadena (aquí un espacio), la primera devuelve una cadena vacía. El segundo devuelve toda la cadena. – Progrock

18

strstr() encontrar la primera aparición de una cadena. Devuelve parte de una cadena de pajar que comienza e incluye la primera aparición de aguja hasta el final de pajar.

Tercer parámetro: Si es TRUE, strstr() devuelve la parte del pajar antes de la primera aparición de la aguja (excluida la aguja).

$haystack = 'The quick brown foxed jumped over the etc etc.'; 
$needle = ' '; 
echo strstr($haystack, $needle, true); 

imprime The.

+0

Intenté este código y recibí una advertencia:" Recuento de parámetros incorrectos para strstr() ". La razón es que este código solo funciona a partir de PHP 5.3.0. Estoy usando una versión anterior de PHP. – matsolof

+1

Si no se encuentra la aguja, devuelve falso. Que es lo que esperarías Así que, personalmente, esta parece ser la mejor respuesta. En muchas de las otras respuestas, probablemente también deberías verificar que la cadena contiene el token, de lo contrario obtendrás resultados impredecibles. A menos, por supuesto, es un hecho. – Progrock

+0

Limpio y simple con buenas convenciones de nomenclatura para una comprensión clara. – Kray

4

¿Qué tal esto:

$string = "The quick brown fox jumped over the etc etc."; 

$splitter = " "; 

$pieces = explode($splitter, $string); 

echo $pieces[0]; 
+0

Si no se encuentra el divisor, devuelve toda la cadena. – Progrock

+0

@Progrock, ¿qué ocurre? ¿Qué más quieres? – Soaku

+0

@Soaku, es solo una observación. – Progrock

73

para que los Googlers: strtok es mejor para que

echo strtok("The quick brown fox", ' '); 
+5

Para mí, esta parece ser la mejor solución. – matsolof

+0

¡La mejor solución [2]! –

+1

Único downer sobre strtok, si el token no se encuentra, devuelve toda la cadena. – Progrock

Cuestiones relacionadas