2010-09-13 8 views
5

Sé que esta es una pregunta realmente simple, pero me preguntaba si hay a native php method to inject a string into another string. Mi respuesta habitual a una nueva manipulación de texto es consultar los listados de manual de las funciones de cadena. Pero no vi ningún método nativo para insertar explícitamente una cadena en otra cadena, así que pensé que consultaría SO.Insertar una cadena en una cadena dado un índice

La respuesta es probable algún tipo de combinación de las funciones de cadena nativa php O simplemente regex (que hace que mi ojo sangra y mi cerebro se derrita por lo que lo evito).

EX: Toma una cadena como some-image.jpg e inyectar .big antes .jpg rendimiento some-image.big.jpg

Respuesta

8

You can do anything with regular expressions!

Por su petición específica, la solución sería:

$var = 'myimage.jpg'; 
$new_var = preg_replace('/\.jpg$/', '.big$0', $var); 

que sugeriría leer sobre cómo escribir expresiones regulares, ya que pueden ser muy útiles en el desarrollo (here's a starting point).

+0

jajaja, refiérase al comentario sangrante de mi ojo. ¡No me opongo al uso de expresiones regulares, simplemente escribirlo! jaja. Aunque he llegado a un acuerdo con el hecho de que necesito mejorar y aprender mejor. –

+1

el odio de mi ojo por la expresión regular ... este es un magnífico tutorial sobre regex - http://www.phpfreaks.com/tutorial/regular-expressions-part1---basic-syntax –

+0

@Derek http: // www. regular-expressions.info/tutorial.html si quieres aprender regex mejor;) –

24

Puede utilizar substr_replace para insertar una cadena mediante la sustitución de una subcadena de longitud cero con su inserción:

$string = "some-image.jpg"; 
$insertion = ".big"; 
$index = 10; 

$result = substr_replace($string, $insertion, $index, 0); 

Desde la página del manual (la descripción de la (cuarto argumento length)):

Si la longitud es cero, esta función también tiene el efecto de la inserción de repuesto en cadena en el desplazamiento respecto al inicio.

+0

Gah! Batido por segundos :( – erisco

+1

Respuesta mucho mejor IMO. Usar una expresión regular para algo tan simple como esto es overkill – Andy

+0

Esto supone que conocemos el índice. Probablemente no ... así que sí, regex – CptAJ

Cuestiones relacionadas