जवाबों:
$newstr = substr_replace($oldstr, $str_to_insert, $pos, 0);
$str = substr($oldstr, 0, $pos) . $str_to_insert . substr($oldstr, $pos);
पुतिन फ़ंक्शन के बजाय stringInsert फ़ंक्शन का उपयोग करें। मैं एक 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.
बस कुछ जोड़ना चाहते थे: मुझे टिम कॉपर्स का उत्तर बहुत उपयोगी लगा, मैंने इसका उपयोग एक ऐसी विधि बनाने के लिए किया, जो पदों की एक सरणी को स्वीकार करता है और उन सभी को सम्मिलित करता है, इसलिए यह है:
संपादित करें: ऐसा लगता है कि मेरे पुराने फ़ंक्शन$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
अनावश्यक है। प्रश्न निर्दिष्ट स्थान के बाद सबस्ट्रिंग डालने के बारे में था।
अजीब जवाब यहाँ! आप स्प्रिंट के साथ आसानी से अन्य स्ट्रिंग में तार डाल सकते हैं [प्रलेखन के लिए लिंक]। फ़ंक्शन बेहद शक्तिशाली है और कई तत्वों और अन्य डेटा प्रकारों को भी संभाल सकता है।
$color = 'green';
sprintf('I like %s apples.', $color);
आपको तार देता है
I like green apples.
'I like apples.'
एक चर के रूप में है। इसलिए हमें %s
पहले स्ट्रिंग में सम्मिलित करना होगा , जो मूल समस्या पर वापस