2009-09-03 5 views
30

Просто посмотрел на функцииКак вставить строку внутри другой строки?

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

который помогает раздуть некоторую строку на левой, правой или с обеих сторон данного входа.

Есть ли какая-либо функция php, которую я могу использовать для вставки строки во входную строку?

, например ..

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

так, если я даю индекс вставки 3, он вставляет "@" после первых 3 осталось большинство символов и $input становится "[email protected]".

благодаря

ответ

64

Вы ищете вставка строки, а не прокладка.

Padding делает строку установленной длиной, если она еще не на такой длине, поэтому, если вы должны дать длину пэда 3 на «abcdef», ну, это уже в 3, так что ничего не должно произойти.

Try:

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

PHP manual on substr_replace

+6

substr_replace («123123123», «@», 3,0) - «123 @ 123123» –

+3

Это то, что ОП спросил :-) –

+0

да, это функция, которую я хотел посмотреть .. спасибо. – TigerTiger

3

вам нужно:

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

да это работает .. но используя $ NewString = substr_replace ($ orig_string, $ insert_string, $ положение, 0); – TigerTiger

+0

ха? что/кто использует 'substr_replace'? – SilentGhost

2

Ба, я неправильно понял вопрос. Вам нужна одна вставка, а не вставлять все символы X. Сожалею.

Я оставлю его здесь, чтобы он не пропал даром.

Вы можете использовать регулярные выражения и некоторые вычисления, чтобы получить желаемый результат (вы, вероятно, могли бы сделать его чистым регулярное выражение, но это было бы более сложными и менее читаемыми)

[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

да одиночная вставка только .. thnks для вашего ответа .. и только что заметили другие ответы – TigerTiger

+0

Я исправил 2 ошибки в функции. Спасибо, что помогли мне решить мою проблему. – rynop

+0

Большое спасибо .. !! – Ritesh