2009-09-03 18 views
30

se limitó a la función¿Cómo insertar una cadena dentro de otra cadena?

str_pad($input, $pad_length, $pad_str, [STR_PAD_RIGHT, STR_PAD_LEFT, or STR_PAD_BOTH]) 

que ayuda a la almohadilla un trozo de cuerda a la izquierda, derecha o en ambos lados de una entrada dada.

¿Hay alguna función de php que pueda usar para insertar una cadena dentro de una cadena de entrada?

por ejemplo ..

$input = "abcdef"; 
$pad_str = "@"; 

por lo que si doy índice de inserción 3, se inserta después de la primera "@" 3 caracteres más a la izquierda y se convierte en $input"[email protected]".

gracias

Respuesta

64

Usted está buscando una inserción de cuerda, no un relleno.

El relleno hace que una cuerda tenga una longitud determinada, si no está ya en esa longitud, así que si le diera una longitud de la libreta 3 a "abcdef", entonces ya está en 3, por lo que no debería pasar nada.

Probar:

$newstring = substr_replace($orig_string, $insert_string, $position, 0); 

PHP manual on substr_replace

+6

substr_replace ("123123123", "@", 3,0) es "123 @ 123123" –

+3

que es lo que OP pidió :-) –

+0

sí, esta es la función que quería ver ... gracias. – TigerTiger

3

que necesitan:

substr($input, 0, 3).$pad_str.substr($input, 3) 
+0

sí funciona .. pero utilizando newString $ = substr_replace ($ orig_string, $ insert_string, la posición $, 0); – TigerTiger

+0

¿eh? ¿Qué/quién está usando 'substr_replace'? – SilentGhost

2

Bah, leído mal la pregunta. Desea una sola inserción, no inserte cada X caracteres. Lo siento.

Lo dejo aquí para que no se desperdicie.

Se pueden utilizar expresiones regulares y algunos cálculos para obtener el resultado deseado (que probablemente se podría hacer con expresión regular puro, pero eso sería más complejo y menos legible)

[email protected]:~$ more re.php 
<?php 

$test1 = "123123123"; 
$test2 = "12312"; 

echo puteveryXcharacters($a,"@",3); 
echo "\n"; 
echo puteveryXcharacters($b,"@",3); 
echo "\n"; 
echo puteveryXcharacters($b,"$",3); 
echo "\n"; 

function puteveryXcharacters($str,$wha,$cnt) { 
    $strip = false; 
    if (strlen($str) % $cnt == 0) { 
    $strip = true; 
    } 
    $tmp = preg_replace('/(.{'.$cnt.'})/',"$1$wha", $str); 
    if ($strip) { 
    $tmp = substr($tmp,0,-1); 
    } 
    return $tmp; 
} 

?> 
[email protected]:~$ php re.php 
[email protected]@123 
[email protected] 
123$12 
+0

sí único inserte solo .. gracias por su respuesta ... y acaba de notar otras respuestas también – TigerTiger

+0

He reparado 2 errores en la función. Gracias por esto me ayudó a resolver mi problema. – rynop

+0

Muchas gracias .. !! – Ritesh

Cuestiones relacionadas