2012-03-27 32 views
8

Necesito dividir una cadena en dos partes. La cadena contiene palabras separadas por un espacio y puede contener cualquier número de palabras, por ejemplo:Dividir una cadena en dos partes

$string = "one two three four five";

La primera parte debe contener todas las palabras, a excepción de la última. La segunda parte debe contener solo la última palabra.

¿Alguien me puede aconsejar?

EDIT: Las dos partes necesitan ser devueltos como cadenas, no matrices, por ejemplo:

$part1 = "one two three four";

$part2 = "five";

+1

strrpos sería un buen punto de partida. El manual tiene más. – GordonM

Respuesta

21

maneras Pareja usted puede ir sobre ella.

operaciones de matriz:

$string ="one two three four five"; 
$words = explode(' ', $string); 
$last_word = array_pop($words); 
$first_chunk = implode(' ', $words); 

Operaciones con cadenas:

$string="one two three four five"; 
$last_space = strrpos($string, ' '); 
$last_word = substr($string, $last_space); 
$first_chunk = substr($string, 0, $last_space); 
+0

Lógicamente, como OP usa cadenas y no utiliza matrices, yo diría que use la opción de matriz "no" ya que no necesitan una matriz (hace que el código parezca más lógico ya que solo está trabajando con una cadena) pero ¿Hay alguna diferencia de rendimiento? – James

7

Lo que se necesita es dividir la cadena de entrada en el último espacio. Ahora un último espacio es un espacio al que no le siguen más espacios. Así que usted puede utilizar afirmación de búsqueda negativa hacia delante para encontrar el último espacio:

$string="one two three four five"; 
$pieces = preg_split('/ (?!.*)/',$string); 
+0

Limpio y simple! +1 –

5

Tenga una mirada en la función explode en PHP

Devuelve una matriz de cadenas, cada una de las cuales es una subcadena de cadena formada mediante su división en los límites formados por la cadena delimitadora

1
$string = "one two three four five"; 
$array = explode(" ", $string); // Split string into an array 

$lastWord = array_pop($array); // Get the last word 
// $array now contains the first four words 
2
$string="one two three four five"; 

list($second,$first) = explode(' ',strrev($string),2); 
$first = strrev($first); 
$second = strrev($second); 

var_dump($first); 
var_dump($second); 
1

Esto debe hacerlo:

$arr = explode(' ', $string); 
$second = array_pop($arr); 
$result[] = implode(' ', $arr); 
$result[] = $second; 
1

Uso strrpos para obtener la posición del último carácter de espacio, entonces substr para dividir la cadena con esa posición.

<?php 
    $string = 'one two three four five'; 
    $pos = strrpos($string, ' '); 
    $first = substr($string, 0, $pos); 
    $second = substr($string, $pos + 1); 
    var_dump($first, $second); 
?> 

Live example

1

Algo como esto lo haría, aunque no es particularmente elegante.

$string=explode(" ", $string); 
$new_string_1=$string[0]." ".$string[1]." ".$string[2]." ".$string[3]; 
$new_string_2=$string[4]; 
1
$string="one two three four five"; 
$matches = array(); 
preg_match('/(.*?)(\w+)$/', $string, $matches); 
print_r($matches); 

Salida:

Array ([0] => one two three four five [1] => one two three four [2] => five)

A continuación, sus partes y habría $matches[1]$matches[2]

1

mi solución en Perl:) ...PHP y Perl son similares :) $ string = "one five three four five";

@s = split(/\s+/, $string) ; 

$s1 = $string ; 
$s1 =~ s/$s[-1]$//e ; 

$s2 = $s[-1] ; 
print "The first part: $s1 \n"; 
print "The second part: $s2 \n"; 
Cuestiones relacionadas