มีฟังก์ชั่น PHP ที่สามารถทำได้หรือไม่?
ฉันใช้strpos
เพื่อรับตำแหน่งของสตริงย่อยและฉันต้องการแทรกstring
หลังจากตำแหน่งนั้น
มีฟังก์ชั่น PHP ที่สามารถทำได้หรือไม่?
ฉันใช้strpos
เพื่อรับตำแหน่งของสตริงย่อยและฉันต้องการแทรกstring
หลังจากตำแหน่งนั้น
คำตอบ:
$newstr = substr_replace($oldstr, $str_to_insert, $pos, 0);
$str = substr($oldstr, 0, $pos) . $str_to_insert . substr($oldstr, $pos);
ลองใช้มันจะทำงานกับสตริงย่อยจำนวนเท่าใดก็ได้
<?php
$string = 'bcadef abcdef';
$substr = 'a';
$attachment = '+++';
//$position = strpos($string, 'a');
$newstring = str_replace($substr, $substr.$attachment, $string);
// bca+++def a+++bcdef
?>
ใช้ฟังก์ชัน stringInsert แทนที่จะใช้ฟังก์ชัน putinplace ฉันใช้ฟังก์ชันในภายหลังเพื่อแยกแบบสอบถาม mysql แม้ว่าผลลัพธ์จะออกมาดี แต่การค้นหาส่งผลให้เกิดข้อผิดพลาดซึ่งใช้เวลาสักครู่ในการติดตาม ต่อไปนี้เป็นรุ่นของฉันของฟังก์ชั่น stringInsert ที่ต้องการเพียงหนึ่งพารามิเตอร์
function stringInsert($str,$insertstr,$pos)
{
$str = substr($str, 0, $pos) . $insertstr . substr($str, $pos);
return $str;
}
str_replace($sub_str, $insert_str.$sub_str, $org_str);
using strpos to get the position of a substring
ดังนั้นsubstring
จะมาก่อน และเขาไม่ได้พูดว่าหาเพียงตำแหน่งเดียว
ฉันมีหนึ่งหน้าที่เก่าของฉันสำหรับสิ่งนั้น:
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.
แค่อยากจะเพิ่มบางสิ่ง: ฉันพบว่าคำตอบของ Tim Cooper มีประโยชน์มากฉันใช้มันเพื่อสร้างวิธีการที่ยอมรับอาร์เรย์ของตำแหน่งต่างๆ
แก้ไข:ดูเหมือนว่าฟังก์ชั่นเก่าของฉันสันนิษฐานว่า$insertstr
เป็นเพียง 1 ตัวอักษรและอาร์เรย์ที่ถูกจัดเรียง ใช้งานได้กับความยาวอักขระโดยพลการ
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;
}
วิธีแก้ปัญหาที่ง่ายและอีกวิธีหนึ่ง:
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
ไม่จำเป็น คำถามเกี่ยวกับการแทรกสตริงย่อยหลังจากตำแหน่งที่ระบุ
คำตอบแปลก ๆ ที่นี่! คุณสามารถแทรกสตริงลงในสตริงอื่น ๆ ได้อย่างง่ายดายด้วยsprintf [ลิงก์ไปยังเอกสารประกอบ] ฟังก์ชั่นนี้มีประสิทธิภาพสูงมากและสามารถรองรับองค์ประกอบหลายอย่างและชนิดข้อมูลอื่น ๆ ได้เช่นกัน
$color = 'green';
sprintf('I like %s apples.', $color);
ให้สตริง
I like green apples.
'I like apples.'
ตัวแปร ดังนั้นเราจะต้องแทรก%s
ก่อนในสตริงซึ่งกลับไปที่ปัญหาเดิม