निर्दिष्ट स्थान पर स्ट्रिंग डालें


269

क्या कोई PHP फ़ंक्शन है जो ऐसा कर सकता है?

मैं strposएक विकल्प की स्थिति प्राप्त करने के लिए उपयोग कर रहा हूं और मैं stringउस स्थिति के बाद सम्मिलित करना चाहता हूं ।

जवाबों:


565
$newstr = substr_replace($oldstr, $str_to_insert, $pos, 0);

http://php.net/substr_replace


24
यह स्वीकृत उत्तर होना चाहिए। बिल्ट-इन फ़ंक्शंस किसी भी दिन उपयोगकर्ता-निर्मित फ़ंक्शंस पर वरीयता लेते हैं।
बेंजाम

13
हां, 4 वें तर्क "0" के कारण मूल स्ट्रिंग में से किसी को अधिलेखित किए बिना प्रतिकृति स्ट्रिंग को डाला जा सकता है।
बटल बुटक

7
शानदार जवाब। लेकिन आलसी लोगों (मेरे जैसे) के लिए शायद आपकी पोस्ट में एक छोटा स्पष्टीकरण होना चाहिए। मैं इसे अभी करूँगा और php.net से copy'n'paste करूँगा: "बेशक, यदि लंबाई शून्य है, तो इस फ़ंक्शन पर दिए गए स्टार्ट ऑफ़्स में स्ट्रिंग में प्रतिस्थापन डालने का प्रभाव होगा।"
वुल्फस्लैव्ट

7
खबरदार: फ़ंक्शन root_replace () मल्टीबाइट सुरक्षित नहीं है! आपका $ पॉज़ UTF-8 वर्ण के बीच में हो सकता है। आपको @ टिम-कूपर के समाधान को नियोजित करने की आवश्यकता हो सकती है लेकिन mb_substr () का उपयोग करके।
रिचप्लेन


12

इसे आज़माएं, यह किसी भी संख्या में सबस्ट्रिंग के लिए काम करेगा

<?php
    $string = 'bcadef abcdef';
    $substr = 'a';
    $attachment = '+++';

    //$position = strpos($string, 'a');

    $newstring = str_replace($substr, $substr.$attachment, $string);

    // bca+++def a+++bcdef
?>

7

पुतिन फ़ंक्शन के बजाय stringInsert फ़ंक्शन का उपयोग करें। मैं एक mysql क्वेरी पार्स करने के लिए बाद के फ़ंक्शन का उपयोग कर रहा था। हालाँकि आउटपुट ठीक लग रहा था, लेकिन क्वेरी में त्रुटि हुई जिसके कारण मुझे ट्रैक करने में थोड़ा समय लगा। निम्नलिखित केवल एक पैरामीटर की आवश्यकता के लिए stringInsert फ़ंक्शन का मेरा संस्करण है।

function stringInsert($str,$insertstr,$pos)
{
    $str = substr($str, 0, $pos) . $insertstr . substr($str, $pos);
    return $str;
}  

4
str_replace($sub_str, $insert_str.$sub_str, $org_str);

@ मिनिटेक ने कहा using strpos to get the position of a substring, इसलिए सबसे substringपहले आता है। और उसने यह नहीं कहा कि केवल एक ही स्थिति खोजो।
xdazz

3

मेरे पास उसके लिए अपना एक पुराना कार्य है:

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

यह एक छोटा शक्तिशाली कार्य है जो अपने कार्य को त्रुटिपूर्ण करता है।


3

यह मेरा सरल उपाय था कि कीवर्ड मिलने के बाद भी अगली पंक्ति में टेक्स्ट जोड़ें।

$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.

3

बस कुछ जोड़ना चाहते थे: मुझे टिम कॉपर्स का उत्तर बहुत उपयोगी लगा, मैंने इसका उपयोग एक ऐसी विधि बनाने के लिए किया, जो पदों की एक सरणी को स्वीकार करता है और उन सभी को सम्मिलित करता है, इसलिए यह है:

संपादित करें: ऐसा लगता है कि मेरे पुराने फ़ंक्शन$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;
}

1
यह काम नहीं करता। आपका ऑफसेट $ 1 के लंबे वर्ण होने के लिए $ अंतरा मानता है। आपको आवेषण की लंबाई के आधार पर ऑफसेट को जोड़ने की आवश्यकता है, 0 से शुरू करें और पदार्थ के बाद जोड़ें। इसके अलावा आप इसे काम करने के लिए कम से उच्च पदों को सॉर्ट करना चाहिए। मैंने आपके फ़ंक्शन को यहाँ ठीक कर दिया है, आप अपना कोड संपादित करना चाह सकते हैं: pastebin.com/g9ADpuU4
Matthias S

@ मैथियास धन्यवाद, अगली बार बस संपादित करें या सुझाव संपादित करें, मैंने 2 साल बाद इस तिल को नोटिस नहीं किया
chiliNUT 15:18

1

सरल और हल करने का दूसरा तरीका:

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;

}  

शायद यह भी बताता है कि फ़ंक्शन का उपयोग कैसे किया जाता है?
रोटिमी

1
function insSubstr($str, $sub, $posStart, $posEnd){
  return mb_substr($str, 0, $posStart) . $sub . mb_substr($str, $posEnd + 1);
}

$posEndअनावश्यक है। प्रश्न निर्दिष्ट स्थान के बाद सबस्ट्रिंग डालने के बारे में था।
स्टाइलएक्स

हां, लेकिन मैंने अपने प्रोजेक्ट के लिए यह फंक्शन किया। जहाँ मुझे किसी जगह की ज़रूरत थी और दूसरी जगह सिर्फ डालने की। मेरा कार्य इस प्रश्न के लिए भी काम कर रहा है, इसलिए मुझे समझ में नहीं आया कि आपने मुझे ऋण क्यों दिया?
इवान इवान

0

अजीब जवाब यहाँ! आप स्प्रिंट के साथ आसानी से अन्य स्ट्रिंग में तार डाल सकते हैं [प्रलेखन के लिए लिंक]। फ़ंक्शन बेहद शक्तिशाली है और कई तत्वों और अन्य डेटा प्रकारों को भी संभाल सकता है।

$color = 'green';
sprintf('I like %s apples.', $color);

आपको तार देता है

I like green apples.

1
वह अच्छा हैं। लेकिन यह एक प्रोग्रामेटिक दृष्टिकोण नहीं संभालता है। हमारे पास आमतौर पर 'I like apples.'एक चर के रूप में है। इसलिए हमें %sपहले स्ट्रिंग में सम्मिलित करना होगा , जो मूल समस्या पर वापस
लौटती
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.