Есть ли функция PHP, которая может это сделать?
Я использую strpos
чтобы получить позицию подстроки, и я хочу вставить string
после этой позиции.
$newstr = substr_replace($oldstr, $str_to_insert, $pos, 0);
$str = substr($oldstr, 0, $pos) . $str_to_insert . substr($oldstr, $pos);
substr
в PHP Manual
Попробуйте, он будет работать для любого количества подстрок
<?php $string = 'bcadef abcdef'; $substr = 'a'; $attachment = '+++'; //$position = strpos($string, 'a'); $newstring = str_replace($substr, $substr.$attachment, $string); // bca+++def a+++bcdef ?>
str_replace($sub_str, $insert_str.$sub_str, $org_str);
Просто хотел добавить что-то: я нашел ответ tim cooper очень полезным, я использовал его для создания метода, который принимает массив позиций и делает вставку на всех из них, вот так вот:
function stringInsert($str,$pos,$insertstr) { if (!is_array($pos)) $pos=array($pos); $offset=-1; foreach($pos as $p) { $offset++; $str = substr($str, 0, $p+$offset) . $insertstr . substr($str, $p+$offset); } return $str; }
Используйте функцию stringInsert, а не функцию putinplace. Я использовал более позднюю функцию для анализа запроса mysql. Хотя вывод выглядел хорошо, запрос привел к ошибке, которая потребовала времени для отслеживания. Ниже приведена моя версия функции stringInsert, требующая только одного параметра.
function stringInsert($str,$insertstr,$pos) { $str = substr($str, 0, $pos) . $insertstr . substr($str, $pos); return $str; }
У меня есть одна моя старая функция:
function putinplace($string=NULL, $put=NULL, $position=false) { $d1=$d2=$i=false; $d=array(strlen($string), strlen($put)); if($position > $d[0]) $position=$d[0]; for($i=$d[0]; $i >= $position; $i--) $string[$i+$d[1]]=$string[$i]; for($i=0; $i<$d[1]; $i++) $string[$position+$i]=$put[$i]; return $string; } // Explanation $string='My dog dont love postman'; // string $put="'"; // put ' on position $position=10; // number of characters (position) print_r( putinplace($string, $put, $position) ); //RESULT: My dog don't love postman
Это небольшая мощная функция, которая безупречно выполняет свою работу.
Это было мое простое решение, также добавив текст в следующую строку после того, как он нашел ключевое слово.
$oldstring = "This is a test\n#FINDME#\nOther text and data."; function insert ($string, $keyword, $body) { return substr_replace($string, PHP_EOL . $body, strpos($string, $keyword) + strlen($keyword), 0); } echo insert($oldstring, "#FINDME#", "Insert this awesome string below findme!!!");
Вывод:
This is a test #FINDME# Insert this awesome string below findme!!! Other text and data.
Простой и другой способ решения:
function stringInsert($str,$insertstr,$pos) { $count_str=strlen($str); for($i=0;$i<$pos;$i++) { $new_str .= $str[$i]; } $new_str .="$insertstr"; for($i=$pos;$i<$count_str;$i++) { $new_str .= $str[$i]; } return $new_str; }
Странные ответы здесь! Вы можете легко вставлять строки в другие строки с помощью sprintf [ссылка на документацию]. Функция чрезвычайно эффективна и может обрабатывать несколько элементов и другие типы данных.
$color = 'green'; sprintf('I like %s apples.', $color);
дает вам строку
I like green apples.
function insSubstr($str, $sub, $posStart, $posEnd){ return mb_substr($str, 0, $posStart) . $sub . mb_substr($str, $posEnd + 1); }