2009-04-04 13 views
17
$split_point = ' - '; 
$string = 'this is my - string - and more'; 

¿Cómo puedo hacer una división usando la segunda instancia de $ split_point y no la primera? ¿Puedo especificar de alguna manera una búsqueda de derecha a izquierda? El mejor enfoque simple?Cómo explotar una cadena de derecha a izquierda?

Básicamente, cómo exploto de derecha a izquierda. Quiero recoger la última instancia de "-".

Resultado necesito:

$item[0]='this is my - string'; $item[1]='and more'; 

y no:

$item[0]='this is my'; $item[1]='string - and more'; 
+1

¿qué quieres conseguir? – SilentGhost

+0

Resultado: $ item [0] = 'this is my - string'; $ item [1] = 'y más'; – Codex73

+0

Después de explotar su matriz sería: 'this is my', 'string', 'y más' –

Respuesta

26

Es posible utilizar strrev para invertir la cadena, y luego revertir los resultados de vuelta:

$split_point = ' - '; 
$string = 'this is my - string - and more'; 

$result = array_map('strrev', explode($split_point, strrev($string))); 

No estoy seguro si esta es la mejor solución sin embargo.

+1

¡Creativo! ¡solución! – Evert

+0

Suena genial,., Wow ... Lo intentaré ahora y lo veré. – Codex73

+0

¿Por qué usar split y no explotar? ¿Alguna diferencia? – Codex73

4

Si he entendido bien, desea que el caso de ejemplo para darle ('este es mi - cadena', 'y más ')?

El split/explosionado incorporado parece ser solo para el futuro, es probable que deba implementarlo usted mismo con strrpos. (Búsqueda de la derecha, dejando-)

$idx = strrpos($string, $split_point); 
$parts = array(substr($string, 0, $idx), substr($string, $idx+strlen($split_point))) 
2

¿Por qué no dividir en '-', pero luego unir las primeras dos entradas de la matriz que vuelven a estar juntas?

+0

suena interesante. – Codex73

+0

pero necesito dividirme en la última instancia siempre de -. – Codex73

+0

+1, la forma más fácil – SilentGhost

12

¿Qué tal esto:

$parts = explode($split_point, $string); 
$last = array_pop($parts); 
$item = array(implode($split_point, $parts), $last); 

no va a ganar ningún premio de golf, pero muestra intención y funciona bien, creo.

+0

Funciona con cadenas utf-8 (por ejemplo, árabe) –

0

Suponiendo solo deseas la primera aparición de $ split_point a ser ignorado, esto debería funcionar para usted:

# retrieve first $split_point position 
$first = strpos($string, $split_point); 
# retrieve second $split_point positon 
$second = strpos($string, $split_point, $first+strlen($split_point)); 
# extract from the second $split_point onwards (with $split_point) 
$substr = substr($string, $second); 

# explode $substr, first element should be empty 
$array = explode($split_point, $substr); 

# set first element as beginning of string to the second $split_point 
$array[0] = substr_replace($string, '', strpos($string, $substr)); 

Esto le permitirá dividir en cada ocurrencia de $ split_point después (e incluyendo) el segundo ocurrencia de $ split_point.

1

He tropezado uppon la misma, y ​​lo arreglaron, así:

$split_point = ' - '; 
$string = 'this is my - string - and more'; 

$reverse_explode = array_reverse(explode($split_point, $string)); 
5

Aquí hay otra manera de hacerlo:

$split_point = ' - '; 
$string = 'this is my - string - and more'; 

$stringpos = strrpos($string, $split_point, -1); 
$finalstr = substr($string,0,$stringpos); 
0
$split_point = ' - '; 
$string = 'this is my - string - and more'; 
$result = end(explode($split_point, $string)); 

Esto está funcionando bien

1

Me gustó la respuesta de Moff, pero la mejoré al limitar el número de elementos a 2 y revertir la matriz:

$split_point = ' - '; 
$string = 'this is my - string - and more'; 

$result = array_reverse(array_map('strrev', explode($split_point, strrev($string),2))); 

Entonces $ resultado será:

Array ([0] => this is my - string [1] => and more) 
2

esta es mi - cadena - y más

  1. uso común explotar función para obtener todas las cadenas
  2. Obtener gama sizeof y buscar el último artículo
  3. Pop Último elemento usando a rray_pop función.
  4. Implode la cadena restante con el mismo delímetro (si desea otro delímetro puede usar).

Código

$arrSpits=explode("", "this is my - string - and more"); 
$arrSize=count($arrSpits); 

echo "Last string".$arrSpits[arrSize-1];//Output: and more 


array_pop(arrSpits); //now pop the last element from array 

$firstString=implode("-", arrSpits); 
echo "First String".firstString; //Output: this is my - string 
Cuestiones relacionadas