php - hoja - split google
¿Cómo explotar la cadena de derecha a izquierda? (10)
¿Por qué no dividir en ''-'', pero luego unir las dos primeras entradas de matriz para que vuelvan a estar juntas?
$split_point = '' - '';
$string = ''this is my - string - and more'';
¿Cómo puedo hacer una división utilizando la segunda instancia de $ split_point y no la primera? ¿Puedo especificar de alguna manera una búsqueda de derecha a izquierda? ¿Mejor enfoque simple?
Básicamente, ¿cómo exploto de derecha a izquierda? Quiero recoger la última instancia de "-".
Resultado que necesito:
$item[0]=''this is my - string''; $item[1]=''and more'';
y no:
$item[0]=''this is my''; $item[1]=''string - and more'';
Aquí hay otra forma de hacerlo:
$split_point = '' - '';
$string = ''this is my - string - and more'';
$stringpos = strrpos($string, $split_point, -1);
$finalstr = substr($string,0,$stringpos);
He tropezado con el mismo y lo he arreglado así:
$split_point = '' - '';
$string = ''this is my - string - and more'';
$reverse_explode = array_reverse(explode($split_point, $string));
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 )
Puede usar strrev para revertir la cadena y luego revertir los resultados:
$split_point = '' - '';
$string = ''this is my - string - and more'';
$result = array_map(''strrev'', explode($split_point, strrev($string)));
Aunque no estoy seguro de si esta es la mejor solución.
Qué tal esto:
$parts = explode($split_point, $string);
$last = array_pop($parts);
$item = array(implode($split_point, $parts), $last);
No voy a ganar ningún premio de golf, pero creo que muestra la intención y funciona bien.
Si comprendo correctamente, ¿desea que el caso de ejemplo le brinde (''esto es mi cadena'', ''y más'')?
La división / explosión incorporada parece ser solo hacia adelante, probablemente tendrá que implementarlo usted mismo con strrpos. (búsqueda de derecha a izquierda)
$idx = strrpos($string, $split_point);
$parts = array(substr($string, 0, $idx), substr($string, $idx+strlen($split_point)))
Suponiendo que solo desea que se ignore la primera aparición de $ split_point, 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á dividirse en cada aparición de $ split_point después de (e incluir) la segunda aparición de $ split_point.
este es mi - cadena - y más
- Utilice la función de explosión común para obtener todas las cadenas
- Obtener sizeof array y obtener el último elemento
- Pop último elemento utilizando la función array_pop .
- Implode la cadena restante con el mismo delimitador (si lo desea, puede usar otro delimitador).
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
$split_point = '' - '';
$string = ''this is my - string - and more'';
$result = end(explode($split_point, $string));
Esto esta funcionando bien