Câu trả lời:
$newstr = substr_replace($oldstr, $str_to_insert, $pos, 0);
$str = substr($oldstr, 0, $pos) . $str_to_insert . substr($oldstr, $pos);
Sử dụng hàm stringInsert thay vì hàm putinplace. Tôi đã sử dụng hàm sau để phân tích một truy vấn mysql. Mặc dù đầu ra trông ổn, nhưng truy vấn dẫn đến một lỗi khiến tôi mất một lúc để theo dõi. Sau đây là phiên bản của hàm stringInsert chỉ cần một tham số.
function stringInsert($str,$insertstr,$pos)
{
$str = substr($str, 0, $pos) . $insertstr . substr($str, $pos);
return $str;
}
Tôi có một chức năng cũ của tôi cho điều đó:
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
Đây là một chức năng nhỏ mạnh mẽ thực hiện công việc của mình một cách hoàn hảo.
Đây là giải pháp đơn giản của tôi, thêm văn bản vào dòng tiếp theo sau khi tìm thấy từ khóa.
$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!!!");
Đầu ra:
This is a test
#FINDME#
Insert this awesome string below findme!!!
Other text and data.
Chỉ muốn thêm một cái gì đó: Tôi thấy câu trả lời của tim Cooper rất hữu ích, tôi đã sử dụng nó để tạo ra một phương thức chấp nhận một loạt các vị trí và thực hiện thao tác chèn vào tất cả chúng vì vậy đây là:
EDIT: Có vẻ như chức năng cũ của tôi giả sử$insertstr
chỉ có 1 ký tự và mảng đã được sắp xếp. Điều này làm việc cho chiều dài nhân vật tùy ý.
function stringInsert($str, $pos, $insertstr) {
if (!is_array($pos)) {
$pos = array($pos);
} else {
asort($pos);
}
$insertionLength = strlen($insertstr);
$offset = 0;
foreach ($pos as $p) {
$str = substr($str, 0, $p + $offset) . $insertstr . substr($str, $p + $offset);
$offset += $insertionLength;
}
return $str;
}
Đơn giản và một cách khác để giải quyết:
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;
}
function insSubstr($str, $sub, $posStart, $posEnd){
return mb_substr($str, 0, $posStart) . $sub . mb_substr($str, $posEnd + 1);
}
$posEnd
là không cần thiết. Câu hỏi là về việc chèn chuỗi con sau vị trí được chỉ định.
Câu trả lời kỳ lạ ở đây! Bạn có thể chèn các chuỗi vào các chuỗi khác một cách dễ dàng bằng sprintf [link to document]. Chức năng này cực kỳ mạnh mẽ và có thể xử lý nhiều yếu tố và các loại dữ liệu khác.
$color = 'green';
sprintf('I like %s apples.', $color);
cung cấp cho bạn chuỗi
I like green apples.
'I like apples.'
một biến. Vì vậy, chúng ta phải chèn %s
đầu tiên vào chuỗi, trở lại vấn đề ban đầu