2010-05-26 17 views
10

¿Cuál es la mejor manera de obtener las primeras 5 palabras de una cadena? Cómo puedo dividir la cadena en dos de tal manera que la primera subcadena tiene las 5 primeras palabras de la cadena original y la segunda subserie constituye el resto de la cadena originalPHP ¿Cuál es la mejor manera de obtener las primeras 5 palabras de una cadena?

+0

Si realmente quiere las * palabras * solamente, intente con ['s ($ str) -> words (5)'] (https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/ src/Str.php # L363), como se encuentra en [esta biblioteca independiente] (https://github.com/delight-im/PHP-Str). – caw

Respuesta

37
$pieces = explode(" ", $inputstring); 
$first_part = implode(" ", array_splice($pieces, 0, 5)); 
$other_part = implode(" ", array_splice($pieces, 5)); 

explode rompe el original en una serie de palabras, array_splice le permite obtener ciertos rangos de esas palabras, y luego implode combina los rangos en cadenas únicas.

+7

Use 'explode (" ", $ inputstring, 6)' para guardar el estallido cuando no lo necesite. – salathe

5
<?php 
$words = explode(" ", $string); 
$first = join(" ", array_slice($words, 0, 5)); 
$rest = join(" ", array_slice($words, 5)); 
+2

'str_split' no hace lo que crees que hace. – Amber

+1

De acuerdo con @Amber, 'str_split' convierte el primer argumento en una matriz, [no tiene una firma como la indicada aquí] (http://php.net/manual/en/function.str-split. php) –

+0

Gracias. Normalmente me mezclo 'str_split' y' explosion '. Se corrigió la supervisión menor. – Kenaniah

15

Lo siguiente depende en gran medida de lo que defina como palabra pero es un guiño en otra dirección, lejos de explode -ing.

$phrase = "All the ancient classic fairy tales have always been scary and dark."; 
echo implode(' ', array_slice(str_word_count($phrase, 2), 0, 5)); 

Da

todos los antiguos hadas clásico


Otra alternativa, ya que todo el mundo ama expresiones regulares, sería algo así como:

preg_match('/^(?>\S+\s*){1,5}/', $phrase, $match); 
echo rtrim($match[0]); 
+0

Este último es escueto. +1 –

+0

esto funcionó para mí, gracias –

0
implode(' ', array_slice(explode(' ', $contents), 0, 5)); 

Nota: aquí en el último se puede ver 0, 10 se imprime desde el principio hasta el décimo palabra palabra, por lo que se puede arreglar como usted desea comenzar de la palabra a número total de palabras.

+0

No es lo suficientemente bueno como para explotar espacios. – 4EACH

Cuestiones relacionadas