Quiero extraer la primera palabra de una variable de una cadena. Por ejemplo, tome esta entrada:
<?php $myvalue = 'Test me more'; ?>
La salida resultante debería ser Test
, que es la primera palabra de la entrada. ¿Cómo puedo hacer esto?
Quiero extraer la primera palabra de una variable de una cadena. Por ejemplo, tome esta entrada:
<?php $myvalue = 'Test me more'; ?>
La salida resultante debería ser Test
, que es la primera palabra de la entrada. ¿Cómo puedo hacer esto?
s($str)->words()[0]
útil, como se encuentra en esta biblioteca independiente .Respuestas:
Puede usar la función de explosión de la siguiente manera:
fuente
explode(' ',trim($myvalue))[0]
list($firstword) = explode(' ', trim($myvalue), 1);
limit
parámetro debe ser 2 ya que debe incluir el último elemento que contiene el resto de la cadena; 1 simplemente devolvería la misma cadena. A menos que se creara una gran matriz, iría con la versión de Elliot para una línea.Hay una función de cadena ( strtok ) que se puede usar para dividir una cadena en cadenas más pequeñas ( tokens ) en función de algunos separadores. Para los propósitos de este hilo, la primera palabra (definida como cualquier cosa antes del primer carácter de espacio) de
Test me more
puede obtenerse tokenizando la cadena en el carácter de espacio.Para obtener más detalles y ejemplos, consulte la página del manual de PHP strtok .
fuente
strtok
Es una función extraña y peligrosa que tiene un estado global. El uso de esta función debe ser desaconsejado.Si tienes PHP 5.3
Tenga en cuenta que si
$myvalue
es una cadena con una palabrastrstr
no devuelve nada en este caso. Una solución podría ser agregar un espacio a la cadena de prueba:Eso siempre devolverá la primera palabra de la cadena, incluso si la cadena tiene solo una palabra
La alternativa es algo como:
O usando explotar, que tiene tantas respuestas que lo usaré que no me molestaré en señalar cómo hacerlo.
fuente
strstr
está disponible en PHP ya4.3.0
que no estaba antes5.3.0
, cuandobefore_needle
se agregó el parámetro opcional (que está utilizando en este ejemplo). Solo un aviso, porque estaba confundido, por qué afirmas, que este ejemplo necesita5.3.0
.echo $i === false ? $myvalue : substr( $myvalue, 0, $i );
Podrías hacerlo
fuente
Aunque es un poco tarde, PHP tiene una mejor solución para esto:
fuente
Similar a la respuesta aceptada con un paso menos:
fuente
En caso de que no esté seguro de que la cadena comienza con una palabra ...
fuente
trim($input)
bastaría en este caso: PSimplemente use explotar para obtener cada palabra de la entrada y la salida del primer elemento de la matriz resultante.
fuente
Usando la función de división también puede obtener la primera palabra de la cadena.
fuente
strtok
es más rápido queextract
opreg_*
funciona.fuente
fuente
personalmente
strsplit
/explode
/strtok
no admite límites de palabras, por lo tanto, para obtener una división más aguda, use la expresión regular con el\w
Esto dividiría las palabras con límites hasta un límite de 1.
fuente
Saludos, Ciul
fuente
fuente
Puede hacerlo usando la función de cadena PHP substr sin convertir la cadena en una matriz.
// salida S
fuente
fuente
Función que tokenizará la cadena en dos partes, la primera palabra y la cadena restante.
Valor de retorno: Tendrá
first
yremaining
tecleará la$return
matriz respectivamente. la primera verificaciónstrpos( $title," ") !== false
es obligatoria en caso de que la cadena tenga solo una palabra y no tenga espacio.fuente
$ first_word = str_word_count (1) [0]
No funciona en caracteres especiales y dará como resultado un comportamiento incorrecto si se utilizan caracteres especiales. No es compatible con UTF-8.
Para obtener más información, ¿ es seguro PHP str_word_count () multibyte seguro?
fuente
Como no puede verificar con strok para mayúsculas o minúsculas, esto funciona perfectamente para verificar la primera palabra.
fuente
Su pregunta podría reformularse como "reemplace en la cadena el primer espacio y todo lo que sigue por nada". Entonces esto se puede lograr con una expresión regular simple:
He agregado una llamada opcional a ltrim () para estar seguro: esta función elimina espacios al comienzo de la cadena.
fuente
¡Todas las respuestas aquí están utilizando un enfoque que el procesador necesita para buscar en toda la cadena, incluso si se encuentra la primera palabra! Para cadenas grandes, esto no se recomienda. Este enfoque es óptimo:
fuente
Si quiere saber qué tan rápido cada una de estas respectivas funciones es, me encontré con algunos crudo evaluación comparativa en PHP 7.3 en los seis más votados respuestas aquí (
strpos
consubstr
,explode
concurrent
,strstr
,explode
contrim
,str_word_count
ystrtok
) con 1.000.000 iteraciones cada uno para comparar sus velocidades.Aquí están los resultados variables de 2 ejecuciones consecutivas:
Y los resultados después de invertir el orden de las funciones:
Conclusión Resulta que la velocidad entre estas funciones varía ampliamente y no es tan consistente entre las ejecuciones de prueba como cabría esperar. De acuerdo con estas pruebas rápidas y sucias, cualquiera de las seis funciones elegidas realizará el trabajo en un tiempo razonable. Hay perturbaciones que incluyen otros procesos en ejecución que interfieren con los tiempos de ejecución. Así que solo use cualquier función que tenga el sentido más práctico y legible para usted como programador. Para obtener una imagen de programación más amplia, consulte la Programación literaria de Donald Knuth .
fuente