Str_replace ব্যবহার করছেন যাতে এটি কেবল প্রথম ম্যাচে কাজ করে?


325

আমি এর একটি সংস্করণ চাই str_replace()যা কেবলমাত্র প্রথম ঘটনাকে প্রতিস্থাপন $searchকরে $subject। এর কোন সহজ সমাধান আছে, বা আমার কি হ্যাকি সমাধান দরকার?


এই স্ট্যান্ডলোন লাইব্রেরিতে যেমন পাওয়া যায় আপনি তা খুঁজে পেতে s($subject)->replaceFirst($search)এবং s($subject)->replaceFirstIgnoreCase($search)সহায়ক হতে পারেন ।
কাওয়

উত্তর:


346

প্রিগ_রেপ্লেস দিয়ে করা যায় :

function str_replace_first($from, $to, $content)
{
    $from = '/'.preg_quote($from, '/').'/';

    return preg_replace($from, $to, $content, 1);
}

echo str_replace_first('abc', '123', 'abcdef abcdef abcdef'); 
// outputs '123def abcdef abcdef'

যাদুটি alচ্ছিক চতুর্থ প্যারামিটারে রয়েছে [সীমাবদ্ধতা]। ডকুমেন্টেশন থেকে:

[সীমা] - প্রতিটি বিষয় স্ট্রিংয়ে প্রতিটি প্যাটার্নের সর্বাধিক সম্ভাব্য প্রতিস্থাপন। -১ এ ডিফল্ট (কোনও সীমা নেই)।


যদিও, আরও দক্ষ পদ্ধতির জন্য জম্বাটের উত্তর দেখুন (মোটামুটি, 3-4x দ্রুত)।


39
এই পদ্ধতির খারাপ দিকটি হ'ল নিয়মিত প্রকাশের পারফরম্যান্স পেনাল্টি।
জুমব্যাট

27
আরেকটি নেতিবাচকতা হ'ল আপনাকে "সুই" তে প্রেগ_কোট () ব্যবহার করতে হবে এবং প্রতিস্থাপনে মেটা-অক্ষরগুলি এবং escape এবং escape এড়িয়ে চলতে হবে।
জোশ ডেভিস

32
কদর্য পলায়নের সমস্যাগুলির কারণে এটি সাধারণ সমাধান হিসাবে ব্যর্থ।
জেরেমি কাউফম্যান

2
প্রায়শই নিয়মিত প্রকাশগুলি 'পারফরম্যান্স'-এর কারণে বরখাস্ত হয়, যদি পারফরম্যান্সই প্রাথমিক উদ্বেগ ছিল, আমরা পিএইচপি লিখব না! প্যাটার্নটি মোড়ানোর জন্য '/' ব্যতীত অন্য কিছু ব্যবহার করা যেতে পারে, সম্ভবত '~', যা কিছুটা ডিগ্রীতে পালিয়ে যাওয়ার সমস্যা এড়াতে সহায়তা করবে। এটি নির্ভর করে যে ডেটা কী এবং কোথা থেকে এসেছে।
থমাস রেডস্টোন

1
পারফরম্যান্স একদিকে ফেলে - সম্ভাব্য বাগগুলি ছাড়াও যারা পালানোর সমস্যা নিয়ে অভিযোগ করেন তাদের মনে কী নির্দিষ্ট কিছু আছে preg_quote? উদাহরণস্বরূপ, @ থমাস রেডস্টোন উদ্বেগ প্রকাশ করেছেন যে ডিলিমিটারটি /যদি উপস্থিত হয় তবে এটি বিপজ্জনক হতে পারে $from, তবে ভাগ্যক্রমে এটি হয় না: এটি preg_quoteদ্বিতীয় প্যারামিটারের কারণে যথাযথভাবে পালিয়ে গেছে (এটি সহজেই পরীক্ষা করতে পারে)। আমি নির্দিষ্ট বিষয়গুলি সম্পর্কে আগ্রহী হতে আগ্রহী (যা আমার বইয়ের পিসিআরই সুরক্ষা বাগগুলি হবে)
MvanGeest

610

এর কোনও সংস্করণ নেই, তবে সমাধানটি মোটেও হ্যাকি নয়।

$pos = strpos($haystack, $needle);
if ($pos !== false) {
    $newstring = substr_replace($haystack, $replace, $pos, strlen($needle));
}

খুব সহজ, এবং নিয়মিত প্রকাশের পারফরম্যান্স পেনাল্টি সংরক্ষণ করে।


বোনাস: আপনি যদি সর্বশেষ ঘটনাটি প্রতিস্থাপন করতে চান তবে কেবলমাত্র তার strrposজায়গায় ব্যবহার করুন strpos


17
অনেক দ্রুত হতে পারে এবং নিয়মিত প্রকাশের চেয়ে কম মেমরি ব্যবহার করবে will কেউ কেন
জোশ ডেভিস

12
আমি এই পদ্ধতির পছন্দ করি তবে কোডটিতে একটি ত্রুটি রয়েছে, সাবস্ট্র_রেপ্লেস কলের শেষ প্যারামিটারটি স্ট্রেন ($ প্রতিস্থাপন) এর পরিবর্তে স্ট্রেন ($ সুই) হওয়া উচিত .. দয়া করে সে সম্পর্কে সতর্ক হন !!
নেলসন

এটি "হ্যাকি" এই অর্থে যে এটি কী চলছে তা নির্ধারণ করতে যথেষ্ট বেশি সময় নেয়। এছাড়াও যদি এটি পরিষ্কার কোড হয় তবে কোডটির কোনও ত্রুটি রয়েছে বলে উল্লেখ করা হত না। যদি এইরকম ছোট্ট স্নিপেটে কোনও ভুল করা সম্ভব হয় তবে এটি ইতিমধ্যে ইতিমধ্যে হ্যাকি।
ক্যামিলো মার্টিন

9
ভুলের সম্ভাবনা বনাম লাইনের সংখ্যার সাথে আমি @ ক্যামিলোমার্টিনের সাথে একমত নই। substr_replaceসমস্ত পরামিতিগুলির কারণে ব্যবহার করার জন্য কিছুটা অপ্রয়োজনীয় ফাংশন হলেও , আসল সমস্যাটি হ'ল সংখ্যার মাধ্যমে স্ট্রিং ম্যানিপুলেশন করা কখনও কখনও জটিল - আপনাকে সঠিক ভেরিয়েবল / অফসেটে ফাংশনটি পাস করতে সতর্ক থাকতে হবে। আমি আসলে এতদূর যেতে চাই যে উপরের কোডটি সবচেয়ে সোজা, এবং আমার কাছে, যৌক্তিক, পদ্ধতির,
অ্যালেক্স

1
উজ্জ্বল পদ্ধতির। পরিবর্তনশীল মানগুলির প্রতিস্থাপন করার সময় নিখুঁতভাবে কাজ করে যা তাদের মধ্যে রেগেক্স অক্ষর সংরক্ষণ করে (তাই প্রিগ_রেপ্লেস ভালুক)। এটি সোজা এবং মার্জিত।
প্রাইসাগাস

96

সম্পাদনা করুন: উভয় উত্তর আপডেট হয়েছে এবং এখন সঠিক are আমি উত্তরটি ছেড়ে দেব কারণ ফাংশনের সময় এখনও কার্যকর।

'জুমব্যাট' এবং 'অত্যধিক পিএইচপি' এর উত্তরগুলি দুর্ভাগ্যক্রমে সঠিক নয়। পোস্ট করা উত্তর জম্বাটের এটি একটি সংশোধন (যেমন কোনও মন্তব্য পোস্ট করার মতো যথেষ্ট খ্যাতি আমার নেই):

$pos = strpos($haystack,$needle);
if ($pos !== false) {
    $newstring = substr_replace($haystack,$replace,$pos,strlen($needle));
}

স্ট্রেনের পরিবর্তে ($ সূঁচ) নোট করুন ($ প্রতিস্থাপন করুন)। জুমবাতের উদাহরণ কেবলমাত্র সঠিকভাবে কাজ করবে যদি সূঁচ এবং প্রতিস্থাপন একই দৈর্ঘ্য হয়।

পিএইচপি-র নিজস্ব টিআর_প্লেস হিসাবে একই স্বাক্ষর সহ একটি ফাংশনে এখানে একই কার্যকারিতা রয়েছে:

function str_replace_first($search, $replace, $subject) {
    $pos = strpos($subject, $search);
    if ($pos !== false) {
        return substr_replace($subject, $replace, $pos, strlen($search));
    }
    return $subject;
}

এটি 'অত্যধিক পিএইচপি' এর সংশোধিত উত্তর:

implode($replace, explode($search, $subject, 2));

1 এর পরিবর্তে শেষে 2 টি নোট করুন বা ফাংশন ফর্ম্যাটে:

function str_replace_first($search, $replace, $subject) {
    return implode($replace, explode($search, $subject, 2));
}

আমি দুটি ফাংশন টাইম করেছিলাম এবং কোনও মিল পাওয়া না গেলে প্রথমটি দ্বিগুণ দ্রুত হয়। কোনও ম্যাচ পাওয়া গেলে এগুলি একই গতি হয়।


কেন এই জাতীয়করণ হয় না: _ অফসেট (এনটি) ম্যাচ থেকে ফাংশনটি $ সীমাবদ্ধতার সংস্থাগুলি প্রতিস্থাপন করে যেখানে str_replace_flexible (মিশ্রিত mixed গুলি, মিশ্র $ r, int $ অফসেট, int $ সীমা)।
অ্যাডাম ফ্রাইডম্যান

খুব খারাপ এটি কেবল কেস-সংবেদনশীল প্রতিস্থাপনের জন্য প্রযোজ্য।
andreszs

4
@ অ্যান্ড্রু stripos()উদ্ধারে :-)
গ্রাস ডাবল

76

আমি ভাবলাম কোনটি দ্রুততম, তাই আমি তাদের সবকটি পরীক্ষা করেছি।

নীচে আপনি পাবেন:

  • এই পৃষ্ঠায় যে সমস্ত ফাংশন অবদান রেখেছিল তার একটি বিস্তৃত তালিকা
  • প্রতিটি সংকোচনের জন্য বেঞ্চমার্ক টেস্টিং (10,000 টিরও বেশি রানের গড় কার্যকর সময়)
  • প্রতিটি উত্তরের লিঙ্ক (সম্পূর্ণ কোডের জন্য)

সমস্ত ফাংশন একই সেটিংস দিয়ে পরীক্ষা করা হয়েছিল:

$string = 'OOO.OOO.OOO.S';
$search = 'OOO'; 
$replace = 'B';

ফাংশন যা কেবল স্ট্রিংয়ের মধ্যে স্ট্রিংয়ের প্রথম উপস্থিতিকে প্রতিস্থাপন করে :


ফাংশন যা কেবল একটি স্ট্রিংয়ের মধ্যে স্ট্রিংয়ের শেষ ঘটনাটি প্রতিস্থাপন করে :


এই জন্য ধন্যবাদ, আমি সাধারণত preg_replace যেমন সবচেয়ে নমনীয় ব্যবহার করেন তাহলে কি ভবিষ্যতের খামচি বেশিরভাগ ক্ষেত্রেই 27% ধীর প্রয়োজন হয় উল্লেখযোগ্য হতে যাচ্ছে না
zzapper

@OLinkWeb ডেভেলপমেন্ট আমি আপনার বেনমার্ক স্ক্রিপ্টটি দেখতে আগ্রহী। আমি মনে করি এটি কার্যকর হিসাবে প্রমাণিত হতে পারে।
ডেভ মর্টন 16

substr_replace()ফলাফলটি কেন জিতল তা সহজ; কারণ এটি একটি অভ্যন্তরীণ ফাংশন। দুটি করণীয়-একই জিনিস অভ্যন্তরীণ এবং ব্যবহারকারীর দ্বারা সংজ্ঞায়িত ফাংশন পারফরম্যান্সে পৃথক, কারণ অভ্যন্তরীণ একটি নিম্ন স্তরে চলে। তো, কেন হবে না preg_match()? নিয়মিত প্রকাশগুলি প্রতিটি অভ্যন্তরীণ স্ট্রিং ম্যানিপুলেশন ফাংশনের চেয়ে প্রায় ধীর হয় কারণ তাদের দেশ একাধিকবার অনুসন্ধান করে in
MAChitgarha

1
আমি আশা করি যে আপনার "বিজয়ী" ( substr_replace($string, $replace, 0, strlen($search));) এর মানদণ্ডটি কেবল স্ট্যাটিকটি লিখেনি 0। নন-রেজেক্স সমাধানগুলির সংশ্লেষণের অংশটি হ'ল কোথায় প্রতিস্থাপন করা হবে তা জানার আগে তাদের সূচনা পয়েন্টটি "সন্ধান" করা দরকার।
মিকম্যাকুসা

55

দুর্ভাগ্যক্রমে, আমি কোনও পিএইচপি ফাংশন জানি না যা এটি করতে পারে।
আপনি আপনার নিজের মোটামুটি সহজেই এটি রোল করতে পারেন:

function replace_first($find, $replace, $subject) {
    // stolen from the comments at PHP.net/str_replace
    // Splits $subject into an array of 2 items by $find,
    // and then joins the array with $replace
    return implode($replace, explode($find, $subject, 2));
}

আমি মনে করি এটি তাদের সবার গল্ফিয়াস্ট সংস্করণ - joinপরিবর্তে ব্যবহার করে implode
টাইটাস

return implode($replace, explode($find, $subject, $limit+1));কাস্টম প্রতিস্থাপন নম্বরগুলির জন্য
beppe9000

7

আমি এই ছোট্ট ফাংশনটি তৈরি করেছি যা স্ট্রিংয়ের স্ট্রিংকে (কেস-সংবেদনশীল) সীমাবদ্ধ করে রেজিপক্সের প্রয়োজন ছাড়াই প্রতিস্থাপন করে। এটা ভাল কাজ করে।

function str_replace_limit($search, $replace, $string, $limit = 1) {
    $pos = strpos($string, $search);

    if ($pos === false) {
        return $string;
    }

    $searchLen = strlen($search);

    for ($i = 0; $i < $limit; $i++) {
        $string = substr_replace($string, $replace, $pos, $searchLen);

        $pos = strpos($string, $search);

        if ($pos === false) {
            break;
        }
    }

    return $string;
}

ব্যবহারের উদাহরণ:

$search  = 'foo';
$replace = 'bar';
$string  = 'foo wizard makes foo brew for evil foo and jack';
$limit   = 2;

$replaced = str_replace_limit($search, $replace, $string, $limit);

echo $replaced;
// bar wizard makes bar brew for evil foo and jack

যদিও আমি বরং আরও স্পষ্ট করে বলার ===falseপরিবর্তে এটি is_bool(করব - আমি এই থাম্বসটি কেবল তাই দিচ্ছি কারণ এটি রেজিএক্সপ্রেস উন্মাদনা এড়িয়ে চলেছে ! ... এবং একই সাথে এটি কাজ করছে এবং পরিষ্কার সমাধান ...
jave.web

সহজেই অনুকূলিতকরণযোগ্য preg_সমাধানটিকে প্রাধান্য দেওয়া পাগলামি নয় বরং ব্যক্তিগত পছন্দ। return preg_replace('/'.preg_quote($search, '/').'/', $replace, $content, 1);যারা রেজেক্সকে ভয় পান না তাদের জন্য পড়া খুব সহজ। কেস-সংবেদনশীল অনুসন্ধান দরকার? যোগ iশেষ প্যাটার্ন বিভেদক পরে। ইউনিকোড / মাল্টিবাইট সমর্থন প্রয়োজন? যোগ uশেষ প্যাটার্ন বিভেদক পরে। শব্দ সীমানা সমর্থন প্রয়োজন? \bআপনার অনুসন্ধানের স্ট্রিংয়ের উভয় পাশে যুক্ত করুন । আপনি যদি রেজেক্স না চান তবে রেজেক্স ব্যবহার করবেন না। কোর্সের জন্য ঘোড়া, তবে অবশ্যই উন্মাদনা নয়।
মিকম্যাকুসা

3

সবচেয়ে সহজ উপায় হ'ল নিয়মিত ভাব প্রকাশ করা।

অন্য উপায়টি হল স্ট্রপসের অবস্থান স্ট্রপোস () এর সাথে এবং তারপরে একটি সাবস্ট্রাস্ট্র-রিপ্লেস ()

তবে আমি সত্যিই RegExp এ যাব।


এই পৃষ্ঠার অন্যান্য পোস্টের তুলনায় এই "ইঙ্গিত "টি অস্পষ্ট / নিম্ন-মান।
মিকম্যাকুসা

3
function str_replace_once($search, $replace, $subject) {
    $pos = strpos($subject, $search);
    if ($pos === false) {
        return $subject;
    }

    return substr($subject, 0, $pos) . $replace . substr($subject, $pos + strlen($search));
}

কোড-কেবলমাত্র উত্তরগুলি স্ট্যাকওভারফ্লোতে স্বল্প-মূল্যবান কারণ তারা হাজার হাজার ভবিষ্যত গবেষককে শিক্ষিত / ক্ষমতায়নের একটি দুর্বল কাজ করে।
মিকম্যাকুসা

3

=> কোড পুনর্বিবেচনা করা হয়েছিল, সুতরাং কিছু মন্তব্য খুব পুরানো বিবেচনা করুন

এবং আমাকে এটির উন্নতি করতে সহায়তার জন্য সবাইকে ধন্যবাদ

যে কোনও বিইজি, দয়া করে আমাকে যোগাযোগ করুন; আমি ঠিক পরে এটি ঠিক করব

সুতরাং, এর জন্য যেতে দিন:

প্রথম 'ও' এর পরিবর্তে 'ইএ' প্রতিস্থাপন :

$s='I love you';
$s=str_replace_first('o','ea',$s);
echo $s;

//output: I leave you

কাজ:

function str_replace_first($a,$b,$s)
         {
         $w=strpos($s,$a);
         if($w===false)return $s;
         return substr($s,0,$w).$b.substr($s,$w+strlen($a));
         }

যদি ব্যর্থ হয় $ এতে আএ বনাম আআআআআআআআএ এর মতো পুনরাবৃত্তি
ক্রিস্টো

আমি মনে করি যে হওয়া উচিত substr($where,$b+strlen($this)), না substr($where,$b+1)। এবং আমি অনুমান করি যে substr_replaceএটি আরও দ্রুত।
টাইটাস

কোডটি সংশোধন করা হয়েছিল, এখন এটি দীর্ঘ স্ট্রিংয়ের জন্যও কাজ করে
PYK

এই সমাধানটি কোডড হিসাবে কাজ করে না। প্রুফ: 3v4l.org/cMeZj এবং আপনি যখন পরিবর্তনশীল নামকরণের সমস্যাটি ঠিক করেন, অনুসন্ধানের সন্ধানটি পাওয়া না গেলে এটি কাজ করে না - এটি ইনপুট স্ট্রিংটিকে ক্ষতিগ্রস্থ করে। প্রুফ: 3v4l.org/XHtfc
মিকম্যাকুসা

কেউ কোডটি ফিক্স করার জন্য কি উপযুক্ত? @ মিকম্যাকুসা আপনি কি আবার তা পরীক্ষা করতে পারেন?
PYK

2
$string = 'this is my world, not my world';
$find = 'world';
$replace = 'farm';
$result = preg_replace("/$find/",$replace,$string,1);
echo $result;

এটি প্রথম উত্তরটির মতোই। এছাড়া আপনি যদি একটি কী করা উচিত preg_quoteএর $findএকটি অভিব্যক্তি হিসাবে এটি ব্যবহার করার পূর্বে।
এমিল বিক্রষ্টম

এটি আমি ব্যবহার করেছি, তাই আমি এটির ভোট দিয়েছি। প্রথম উত্তরটি ড্রুপালের সাথে বিরোধের সৃষ্টি করেছিল, এটি অবশ্যই একটি ড্রুপাল সহায়ক ফাংশনকে ওভাররাইট করে ফেলেছে। সুতরাং আমি কেবলমাত্র ফাংশনের অভ্যন্তরে থাকা কোডটি নিয়েছি এবং এটি বাকী কোডের সাথে লাইনটিতে ব্যবহার করেছি ...
ড্যান মান্টিলা

এই কোড-কেবল উত্তরটি পৃষ্ঠায় অপ্রয়োজনীয় পরামর্শ সরবরাহ করে (এটির অভাব রয়েছে তা উল্লেখ করার জন্য নয় preg_quote()late এই দেরী সদৃশ উত্তরটি পৃষ্ঠা থেকে নিরাপদে মুছে ফেলা যেতে পারে কারণ এর পরামর্শটি পূর্ববর্তী, এবং উচ্চতর
উত্তোলিত

2

@ রেনোকারের উত্তরটি প্রসারিত করতে , আমি একটি ফাংশন লিখেছি যা 100% পশ্চাদপদ-সামঞ্জস্যপূর্ণ str_replace()। যে আপনি প্রতিস্থাপন করতে পারেন, হয় সব ঘটনার str_replace()সঙ্গে str_replace_limit()জন্য এমনকি যারা অ্যারে ব্যবহার কিছু আপ তালগোল পাকানো ছাড়া $search, $replaceএবং / অথবা $subject

আপনি যদি ফাংশন কলটির সাথে প্রতিস্থাপন করতে চান তবে ফাংশনটি সম্পূর্ণ স্ব-অন্তর্ভুক্ত হতে পারে ($string===strval(intval(strval($string)))), তবে আমি তার বিরুদ্ধে সুপারিশ করব valid_integer()কারণ স্ট্রিং হিসাবে প্রদত্ত পূর্ণসংখ্যার সাথে কাজ করার সময় এটি একটি দরকারী কার্যকারিতা।

দ্রষ্টব্য: যখনই সম্ভব str_replace_limit()হবে , str_replace()পরিবর্তে ব্যবহার করবে , সুতরাং সমস্ত কলগুলি পারফরম্যান্সের জন্য হিটের চিন্তা না করেই str_replace()প্রতিস্থাপন করা যাবে str_replace_limit()

ব্যবহার

<?php
$search = 'a';
$replace = 'b';
$subject = 'abcabc';
$limit = -1; // No limit
$new_string = str_replace_limit($search, $replace, $subject, $count, $limit);
echo $count.' replacements -- '.$new_string;

2 প্রতিস্থাপন - বিবিসিবিবিসি

$limit = 1; // Limit of 1
$new_string = str_replace_limit($search, $replace, $subject, $count, $limit);
echo $count.' replacements -- '.$new_string;

1 প্রতিস্থাপন - বিবিসিএবিসি

$limit = 10; // Limit of 10
$new_string = str_replace_limit($search, $replace, $subject, $count, $limit);
echo $count.' replacements -- '.$new_string;

2 প্রতিস্থাপন - বিবিসিবিবিসি

ক্রিয়া

<?php

/**
 * Checks if $string is a valid integer. Integers provided as strings (e.g. '2' vs 2)
 * are also supported.
 * @param mixed $string
 * @return bool Returns boolean TRUE if string is a valid integer, or FALSE if it is not 
 */
function valid_integer($string){
    // 1. Cast as string (in case integer is provided)
    // 1. Convert the string to an integer and back to a string
    // 2. Check if identical (note: 'identical', NOT just 'equal')
    // Note: TRUE, FALSE, and NULL $string values all return FALSE
    $string = strval($string);
    return ($string===strval(intval($string)));
}

/**
 * Replace $limit occurences of the search string with the replacement string
 * @param mixed $search The value being searched for, otherwise known as the needle. An
 * array may be used to designate multiple needles.
 * @param mixed $replace The replacement value that replaces found search values. An
 * array may be used to designate multiple replacements.
 * @param mixed $subject The string or array being searched and replaced on, otherwise
 * known as the haystack. If subject is an array, then the search and replace is
 * performed with every entry of subject, and the return value is an array as well. 
 * @param string $count If passed, this will be set to the number of replacements
 * performed.
 * @param int $limit The maximum possible replacements for each pattern in each subject
 * string. Defaults to -1 (no limit).
 * @return string This function returns a string with the replaced values.
 */
function str_replace_limit(
        $search,
        $replace,
        $subject,
        &$count,
        $limit = -1
    ){

    // Set some defaults
    $count = 0;

    // Invalid $limit provided. Throw a warning.
    if(!valid_integer($limit)){
        $backtrace = debug_backtrace();
        trigger_error('Invalid $limit `'.$limit.'` provided to '.__function__.'() in '.
                '`'.$backtrace[0]['file'].'` on line '.$backtrace[0]['line'].'. Expecting an '.
                'integer', E_USER_WARNING);
        return $subject;
    }

    // Invalid $limit provided. Throw a warning.
    if($limit<-1){
        $backtrace = debug_backtrace();
        trigger_error('Invalid $limit `'.$limit.'` provided to '.__function__.'() in '.
                '`'.$backtrace[0]['file'].'` on line '.$backtrace[0]['line'].'. Expecting -1 or '.
                'a positive integer', E_USER_WARNING);
        return $subject;
    }

    // No replacements necessary. Throw a notice as this was most likely not the intended
    // use. And, if it was (e.g. part of a loop, setting $limit dynamically), it can be
    // worked around by simply checking to see if $limit===0, and if it does, skip the
    // function call (and set $count to 0, if applicable).
    if($limit===0){
        $backtrace = debug_backtrace();
        trigger_error('Invalid $limit `'.$limit.'` provided to '.__function__.'() in '.
                '`'.$backtrace[0]['file'].'` on line '.$backtrace[0]['line'].'. Expecting -1 or '.
                'a positive integer', E_USER_NOTICE);
        return $subject;
    }

    // Use str_replace() whenever possible (for performance reasons)
    if($limit===-1){
        return str_replace($search, $replace, $subject, $count);
    }

    if(is_array($subject)){

        // Loop through $subject values and call this function for each one.
        foreach($subject as $key => $this_subject){

            // Skip values that are arrays (to match str_replace()).
            if(!is_array($this_subject)){

                // Call this function again for
                $this_function = __FUNCTION__;
                $subject[$key] = $this_function(
                        $search,
                        $replace,
                        $this_subject,
                        $this_count,
                        $limit
                );

                // Adjust $count
                $count += $this_count;

                // Adjust $limit, if not -1
                if($limit!=-1){
                    $limit -= $this_count;
                }

                // Reached $limit, return $subject
                if($limit===0){
                    return $subject;
                }

            }

        }

        return $subject;

    } elseif(is_array($search)){
        // Only treat $replace as an array if $search is also an array (to match str_replace())

        // Clear keys of $search (to match str_replace()).
        $search = array_values($search);

        // Clear keys of $replace, if applicable (to match str_replace()).
        if(is_array($replace)){
            $replace = array_values($replace);
        }

        // Loop through $search array.
        foreach($search as $key => $this_search){

            // Don't support multi-dimensional arrays (to match str_replace()).
            $this_search = strval($this_search);

            // If $replace is an array, use the value of $replace[$key] as the replacement. If
            // $replace[$key] doesn't exist, just an empty string (to match str_replace()).
            if(is_array($replace)){
                if(array_key_exists($key, $replace)){
                    $this_replace = strval($replace[$key]);
                } else {
                    $this_replace = '';
                }
            } else {
                $this_replace = strval($replace);
            }

            // Call this function again for
            $this_function = __FUNCTION__;
            $subject = $this_function(
                    $this_search,
                    $this_replace,
                    $subject,
                    $this_count,
                    $limit
            );

            // Adjust $count
            $count += $this_count;

            // Adjust $limit, if not -1
            if($limit!=-1){
                $limit -= $this_count;
            }

            // Reached $limit, return $subject
            if($limit===0){
                return $subject;
            }

        }

        return $subject;

    } else {
        $search = strval($search);
        $replace = strval($replace);

        // Get position of first $search
        $pos = strpos($subject, $search);

        // Return $subject if $search cannot be found
        if($pos===false){
            return $subject;
        }

        // Get length of $search, to make proper replacement later on
        $search_len = strlen($search);

        // Loop until $search can no longer be found, or $limit is reached
        for($i=0;(($i<$limit)||($limit===-1));$i++){

            // Replace 
            $subject = substr_replace($subject, $replace, $pos, $search_len);

            // Increase $count
            $count++;

            // Get location of next $search
            $pos = strpos($subject, $search);

            // Break out of loop if $needle
            if($pos===false){
                break;
            }

        }

        // Return new $subject
        return $subject;

    }

}

4
আপনি আমাকে জিজ্ঞাসা যদি কিন্ডা ফুলে। এছাড়াও এই সমাধানটিতে আমি সবচেয়ে বেশি 'ঘৃণা করি' তা হ'ল ত্রুটি পরিচালনা। আপনি ভুল মানগুলি পাস করলে এটি স্ক্রিপ্টটি ভেঙে যায়। আপনি মনে করেন এটি পেশাদার দেখায় তবে এটি ত্রুটির পরিবর্তে কোনও বিজ্ঞপ্তি বা সতর্কতা দেয় produce বুলশিট এড়িয়ে যাওয়া, পরিবর্তে মিথ্যা বা শূন্য ফিরে আসা এবং এর মতো ফাংশনে কখনই ব্যাকট্র্যাস ব্যবহার না করা ভাল। সর্বোত্তম সমাধান হ'ল আউটপুটটি ভুল / অপ্রত্যাশিত হয়ে থাকে তখন প্রোগ্রামার সিদ্ধান্ত নিতে পারে।
কোডবিট

এই ব্যবহারের @Erwinus E_USER_WARNINGসর্বত্র, যা একটি হল সতর্কবার্তা , না একটি ত্রুটি । কোন কোডটি প্রথমে ফাংশনে অবৈধ ডেটাটি পাস করছে তা খুঁজে পাওয়ার জন্য ব্যাকট্রেস অত্যন্ত কার্যকর ((যা প্রোডাকশনে বাগগুলি ট্র্যাক করার জন্য একেবারে প্রয়োজনীয়)। / বা ত্রুটি নিক্ষেপের $subjectপরিবর্তে ফিরে আসার ক্ষেত্রে , এটি আমার ব্যবহারের ক্ষেত্রে কেবল ব্যক্তিগত পছন্দ ছিল। এর কার্যকারিতাটির সাথে মেলে ধরতে, ক্যাচবেল মারাত্মক ত্রুটিগুলি ব্যবহার করা সবচেয়ে ভাল বাজি (যেমন প্রথম দুটি যুক্তির জন্য ক্লোজার সরবরাহ করার সময় হয়)। falsenullstr_replace()str_replace()
বি 10011

আহ, আপনি যে E_USER_WARNING ব্যবহার করছেন সে সম্পর্কে খেয়াল করেননি, এর জন্য দুঃখিত। বিষয়টি ফিরিয়ে দেওয়ার ক্ষেত্রে সমস্যাটি হ'ল ফাংশনের বাইরে আপনি কখনই ভুল কিছু দেখতে পাচ্ছেন না। এটি বলেছিল, আপনি যদি এটি বেশি চৌকস করেন তবে ফাংশনটি অর্ধেক আকারের হতে পারে (এটি সম্ভব)। দ্বিতীয়ত, মন্তব্যগুলি ঠিক আছে যখন এটি জটিল কিছু ব্যাখ্যা করে তবে মূল্য বাড়ানোর মতো সাধারণ জিনিসের জন্য খুব কার্যকর নয়। সামগ্রিকভাবে আমি এটি অপ্রয়োজনীয় বিশাল বলে মনে করি। এছাড়াও, যখন আপনি কোনও সার্ভারে এই কোডটি ব্যবহার করেন যা ডিফল্ট (লগস) দ্বারা রান-টাইম বার্তাগুলি দমন করে না তখন কোনও উত্পাদন পরিবেশে সতর্কতা ব্যবহার করা সুরক্ষা সমস্যা হতে পারে।
কোডবিট

@ এরউনিয়াস আমি মন্তব্যগুলির মুখোমুখি হয়েছিলেন কারণ কিছু লোক ভাষা পাশাপাশি অন্যদেরও বুঝতে পারে না এবং মন্তব্যগুলি যে এটি বোঝে তারা সর্বদা তাদের দ্বারা মুছে ফেলা যায়। আপনি যদি কোনওভাবেই সমস্ত প্রান্তের ক্ষেত্রে একই শেষ ফলাফল পাওয়ার আরও ভাল উপায় সম্পর্কে জানেন তবে উত্তরটি সম্পাদনা করুন। এবং যদি আপনার উত্পাদনের পরিবেশ ত্রুটি বার্তাগুলি দমন না করে তবে আপনি এই ফাংশনটির চেয়ে বড় সমস্যা পেয়েছেন;)
বি 10011

টিএল; ডিআর এই স্নিপেটটি এতটাই স্ফীত হয়ে গেছে যে আমি এটি কোনও রেজেক্স ফাংশনের মাধ্যমে বেছে নেওয়ার কল্পনা করতে পারি না (আমি স্ক্রোলিংকে ঘৃণা করি)। আপনি যদি প্রতিস্থাপনগুলি গণনা করতে চান তবে তার জন্য একটি প্যারামিটার রয়েছে preg_replace()। তদ্ব্যতীত, preg_replace()/ রেজেক্স শব্দের সীমানা হ্যান্ডলিংয়ের প্রস্তাব দেয় (যদি আকাঙ্ক্ষিত হয়) - এমন কিছু যা নন-রেজেক্স ফাংশনগুলি মার্জিতভাবে সরবরাহ করবে না।
মিকম্যাকুসা

2

আমার পরীক্ষার ফলাফল অনুযায়ী, আমি করিম by৯ দ্বারা সরবরাহিত নিয়মিত_এক্সপ্রেসকে ভোট দিতে চাই। (এখনই এটির ভোট দেওয়ার মতো যথেষ্ট খ্যাতি আমার নেই!)

জুমব্যাট থেকে সমাধানে অনেকগুলি ফাংশন কল ব্যবহার করা হয়, আমি কোডগুলিও সহজ করি। আমি উভয় সমাধান 100,000 বার চালানোর জন্য পিএইচপি 5.4 ব্যবহার করছি এবং ফলাফল এখানে:

$str = 'Hello abc, have a nice day abc! abc!';
$pos = strpos($str, 'abc');
$str = substr_replace($str, '123', $pos, 3);

==> 1.85 সেকেন্ড

$str = 'Hello abc, have a nice day abc! abc!';
$str = preg_replace('/abc/', '123', $str, 1);

==> 1.35 সেকেন্ড

যেমন আপনি দেখতে পারেন। প্রিগ_রিপ্লেস এর অভিনয় এতটা খারাপ নয় যেমনটি অনেকে ভাবেন। সুতরাং আমি যদি আপনার নিয়মিত এক্সপ্রেস জটিল না হয় তবে উত্সাহী সমাধানটির পরামর্শ দেব।


আপনার প্রথম স্নিপেটটি একটি অন্যায় তুলনা কারণ এটি সঠিক বাস্তবায়ন ব্যবহার করতে ব্যর্থ। আপনি চেক করা হয় না $posজন্য false, তাই যখন সুই খড়ের গাদা মধ্যে বিদ্যমান নয়, এটা আউটপুট ক্ষতি হবে।
মিকম্যাকুসা

ধন্যবাদ @ মিকম্যাকুসা, আপনি ঠিক বলেছেন। তবে সে কথাটি নয়। আমি বলেছিলাম এই কোডটি কেবল বাস্তবায়নের দক্ষতার সাথে তুলনা করার জন্য সহজ করা হয়েছে।
হান্টার উ

এটাই আমার বক্তব্য। আপনাকে কখনই বেঞ্চমার্কের তুলনা করতে হবে না যা সঠিক একই প্রক্রিয়াটি সম্পাদন করে না। অর্ধ-কমলার সাথে আপেলের তুলনা করা কার্যকর নয়। সম্পূর্ণ নন-রেজেক্স পদ্ধতির সম্পূর্ণরূপে প্রয়োগ করা গতির তফাতটিকে আরও গভীর করবে।
মিকম্যাকুসা

ঠিক আছে, আবার ধন্যবাদ। তবে আমি যা চাই তা হল আরও কার্যকর বাস্তবায়ন সন্ধান করা, আরও তাত্পর্যপূর্ণ না করা।
হান্টার উ

2

জম্বাটের উত্তরের (যা আমি সেরা উত্তর বলে বিশ্বাস করি) প্রসারিত করতে, আমি তার ফাংশনটির একটি পুনরাবৃত্ত সংস্করণ তৈরি $limitকরেছি যা আপনি কতটি ঘটনাকে প্রতিস্থাপন করতে চান তা নির্দিষ্ট করতে একটি পরামিতি গ্রহণ করে ।

function str_replace_limit($haystack, $needle, $replace, $limit, $start_pos = 0) {
    if ($limit <= 0) {
        return $haystack;
    } else {
        $pos = strpos($haystack,$needle,$start_pos);
        if ($pos !== false) {
            $newstring = substr_replace($haystack, $replace, $pos, strlen($needle));
            return str_replace_limit($newstring, $needle, $replace, $limit-1, $pos+strlen($replace));
        } else {
            return $haystack;
        }
    }
}

নোট, সেখানে কোন মানের চেক $start_pos, তাই যদি এটা স্ট্রিং দৈর্ঘ্য পরলোক হল, এই ফাংশন উৎপন্ন হবে: Warning: strpos(): Offset not contained in string...$start_posদৈর্ঘ্যের বাইরে গেলে এই ফাংশনটি প্রতিস্থাপন করতে ব্যর্থ হয় । ব্যর্থতার প্রমাণ: 3v4l.org/qGuVIR ... আপনার ফাংশন return $haystackশর্তগুলি একত্রিত করতে পারে এবং একক-ব্যবহারের ভেরিয়েবলগুলি এ জাতীয় ঘোষণা এড়াতে পারে: 3v4l.org/Kdmqp তবে, আমি এই পৃষ্ঠায় অন্যত্র মন্তব্যগুলিতে বলেছি, আমি বরং বলব খুব পরিষ্কার, ডাইরেক্ট, অ-পুনরাবৃত্ত preg_replace()কলটি ব্যবহার করুন।
মিকম্যাকুসা

হ্যাঁ তাই আপনি এই লাইন যোগ করতে পারে elsestatment$start_pos > strlen($haystack) ? $start_pos = strlen($haystack) : '';
Manojkiran.A

2

একটি স্ট্রিং জন্য

$string = 'OOO.OOO.OOO.S';
$search = 'OOO';
$replace = 'B';

//replace ONLY FIRST occurance of "OOO" with "B"
    $string = substr_replace($string,$replace,0,strlen($search));
    //$string => B.OOO.OOO.S

//replace ONLY LAST occurance of "OOOO" with "B"
    $string = substr_replace($string,$replace,strrpos($string,$search),strlen($search)) 
    //$string => OOO.OOO.B.S

    //replace ONLY LAST occurance of "OOOO" with "B"
    $string = strrev(implode(strrev($replace),explode(strrev($search),strrev($string),2)))
    //$string => OOO.OOO.B.S

একক চরিত্রের জন্য

$string[strpos($string,$search)] = $replace;


//EXAMPLE

$string = 'O.O.O.O.S';
$search = 'O';
$replace = 'B';

//replace ONLY FIRST occurance of "O" with "B" 
    $string[strpos($string,$search)] = $replace;  
    //$string => B.O.O.O.S

//replace ONLY LAST occurance of "O" with "B" 
    $string[strrpos($string,$search)] = $replace; 
    // $string => B.O.O.B.S

ইনপুট স্ট্রিংয়ের 0 টি অফসেটে অনুসন্ধানের স্ট্রিংটি না থাকলে প্রথম সাবস্ট্র_রেপস () স্নিপেট ব্যর্থ হয়। ব্যর্থতার প্রমাণ: 3v4l.org/oIbRv এবং substr_replace()অনুসন্ধানের মান উপস্থিত না থাকলে উভয় কৌশলই ইনপুট স্ট্রিংটিকে ক্ষতিগ্রস্থ করে। ব্যর্থতার প্রমাণ: 3v4l.org/HmEML (এবং সমস্ত revকলগুলির সাথে শেষ কৌশলটি গুরুতরভাবে
সংশ্লেষিত

2

লোকেরা যা বলেছিল তা পরিপূর্ণ করে মনে রাখবেন যে পুরো স্ট্রিংটি একটি অ্যারে:

$string = "Lorem ipsum lá lá lá";

$string[0] = "B";

echo $string;

"বোরম ইপসাম lá lá lá"


3
এটিতে মাল্টিবাইট অক্ষর না থাকলে ... এবং তারপরে আপনার কৌশলটি ব্যর্থ। কত দুর্ভাগ্য যে আপনি একটি নমুনা ইনপুট স্ট্রিং সমন্বিত অফার করেছেন áব্যর্থতার বিক্ষোভ
মিকম্যাকুশ

যদি আপনার আপনি যাচাই করতে পারেন stringব্যবহার করে একটি multibyte স্ট্রিংmb_strlen($subject) != strlen($subject)
RousseauAlexandre

এই পোস্টটি জিজ্ঞাসা করা প্রশ্নের উত্তর দেওয়ার চেষ্টা করে না।
মিকম্যাকুসা

2
$str = "/property/details&id=202&test=123#tab-6p";
$position = strpos($str,"&");
echo substr_replace($str,"?",$position,1);

সাবস্ট্রি_রপ্লেস ব্যবহার করে আমরা প্রথম অক্ষরের উপস্থিতিটি কেবল স্ট্রিংয়ে প্রতিস্থাপন করতে পারি। & হিসাবে একাধিকবার পুনরাবৃত্তি হয়েছে তবে কেবলমাত্র প্রথম অবস্থানেই আমাদের প্রতিস্থাপন করতে হবে এবং এর সাথে?


1

এই ফাংশনটি @ রেনোকর দ্বারা উত্তরে অনুপ্রাণিত হয়। এটি ফাংশনটি মাল্টি বাইটকে নিরাপদ করে তোলে।

function str_replace_limit($search, $replace, $string, $limit)
{
    $i = 0;
    $searchLength = mb_strlen($search);

    while(($pos = mb_strpos($string, $search)) !== false && $i < $limit)
    {
        $string = mb_substr_replace($string, $replace, $pos, $searchLength);
        $i += 1;
    }

    return $string;
}

function mb_substr_replace($string, $replacement, $start, $length = null, $encoding = null)
{
    $string = (array)$string;
    $encoding = is_null($encoding) ? mb_internal_encoding() : $encoding;
    $length = is_null($length) ? mb_strlen($string) - $start : $length;

    $string = array_map(function($str) use ($replacement, $start, $length, $encoding){

        $begin = mb_substr($str, 0, $start, $encoding);
        $end = mb_substr($str, ($start + $length), mb_strlen($str), $encoding);

        return $begin . $replacement . $end;

    }, $string);

    return ( count($string) === 1 ) ? $string[0] : $string;
}

0

আপনি এটি ব্যবহার করতে পারেন:

function str_replace_once($str_pattern, $str_replacement, $string){ 

        if (strpos($string, $str_pattern) !== false){ 
            $occurrence = strpos($string, $str_pattern); 
            return substr_replace($string, $str_replacement, strpos($string, $str_pattern), strlen($str_pattern)); 
        } 

        return $string; 
    } 

এই উদাহরণটি পিএইচপি.নেট থেকে পাওয়া গেছে

ব্যবহার:

$string = "Thiz iz an examplz";
var_dump(str_replace_once('z','Z', $string)); 

আউটপুট:

ThiZ iz an examplz

এটি পারফরম্যান্সটি কিছুটা কমিয়ে দিতে পারে তবে সবচেয়ে সহজ সমাধান।


যদি আউটপুট হয় তবে বিন্দুটি কী? এটি কেবল প্রথম ছোট ছোট জেডকে বড় হাতের "জেড" দিয়ে প্রতিস্থাপন করা উচিত নয়? এর বদলে কি সব গুলো প্রতিস্থাপন করতে হবে? আমি ভেবেছিলাম যে আমরা এখানে এখানে যা বলছিলাম ...
সুইভেল

আমার খারাপ, এটি কেবল প্রথম ঘটনাটি প্রতিস্থাপন করবে। সম্পাদনা করা হয়েছে।
হ্যাপিহার্ডিক

এই একই পরামর্শটি প্রায় 3 বছর আগে বাসের দ্বারা ইতিমধ্যে দেওয়া হয়েছিল (এবং অতিরিক্তভাবে ফোন করা ছাড়াই strpos())। ডাউনভোটেড কারণ এটি পৃষ্ঠায় কোনও নতুন মান যুক্ত করে না।
মিকম্যাকুসা

0

যদি আপনার স্ট্রিংটিতে কোনও মাল্টিবাইট অক্ষর না থাকে এবং আপনি যদি কেবল একটি চরটি প্রতিস্থাপন করতে চান তবে আপনি কেবল ব্যবহার করতে পারেন strpos

এখানে একটি ফাংশন যারা ত্রুটিগুলি পরিচালনা করে

/**
 * Replace the first occurence of given string
 *
 * @param  string $search  a char to search in `$subject`
 * @param  string $replace a char to replace in `$subject`
 * @param  string $subject
 * @return string
 *
 * @throws InvalidArgumentException if `$search` or `$replace` are invalid or if `$subject` is a multibytes string
 */
function str_replace_first(string $search , string $replace , string $subject) : string {
    // check params
    if(strlen($replace) != 1 || strlen($search) != 1) {
        throw new InvalidArgumentException('$search & $replace must be char');
    }elseif(mb_strlen($subject) != strlen($subject)){
        throw new InvalidArgumentException('$subject is an multibytes string');
    }
    // search 
    $pos = strpos($subject, $search);
    if($pos === false) {
        // not found
        return $subject;
    }

    // replace
    $subject[$replace] = $subject;

    return $subject;
}

0

লুপ সমাধানের জন্য

<?php
echo replaceFirstMatchedChar("&", "?", "/property/details&id=202&test=123#tab-6");

function replaceFirstMatchedChar($searchChar, $replaceChar, $str)
{
    for ($i = 0; $i < strlen($str); $i++) {

        if ($str[$i] == $searchChar) {
            $str[$i] = $replaceChar;
            break;
        }
    }
    return $str;
}

-1

আমাদের সামান্য পরিবর্তিত আরআরপ্লেস () টি মোড়ানোর জন্য আমি এখানে তৈরি করেছি একটি সাধারণ ক্লাস' s ফাংশনগুলি ।

আমাদের পিএইচপি :: টিআরআররেপ্লেস () ফাংশন আপনাকে একটি বিপরীত, সীমাবদ্ধ টিআর_রেপ্লেস () সঞ্চালনের অনুমতি দেয় যা কেবল কোনও স্ট্রিংয়ের চূড়ান্ত এক্স উদাহরণ (গুলি) প্রতিস্থাপনের চেষ্টা করার সময় খুব সুবিধাজনক হতে পারে।

এই উদাহরণগুলি উভয়ই প্রেগ_রিজেক্ট () ব্যবহার করে ।

<?php
class php {

    /**
    * str_replace() from the end of a string that can also be limited e.g. replace only the last instance of '</div>' with ''
    *
    * @param string   $find
    * @param string   $replace
    * @param string   $subject
    * @param int      $replacement_limit | -1 to replace all references
    *
    * @return string
    */
    public static function str_replace($find, $replace, $subject, $replacement_limit = -1) {
        $find_pattern = str_replace('/', '\/', $find);
        return preg_replace('/' . $find_pattern . '/', $replace, $subject, $replacement_limit);
    }

    /**
    * str_replace() from the end of a string that can also be limited e.g. replace only the last instance of '</div>' with ''
    *
    * @param string   $find
    * @param string   $replace
    * @param string   $subject
    * @param int      $replacement_limit | -1 to replace all references
    *
    * @return string
    */
    public static function str_rreplace($find, $replace, $subject, $replacement_limit = -1) {
        return strrev( self::str_replace(strrev($find), strrev($replace), strrev($subject), $replacement_limit) );
    }
}

আপনার পোস্টটি ইতিমধ্যে স্যাচুরেটেড পৃষ্ঠার চেয়ে বেশি মান যোগ করে না। আপনার রেজেক্স সলিউশন অনেকগুলি ফ্রিঞ্জ ক্ষেত্রে ব্যর্থ হয় কারণ আপনি সুই স্ট্রিংয়ের অক্ষরগুলি থেকে বাঁচতে ভুল সরঞ্জামটি ব্যবহার করেছিলেন। ব্যর্থতার প্রমাণ: 3v4l.org/dTdYK ২০০৯-এর ভারী উত্সাহিত এবং স্বীকৃত উত্তর ইতিমধ্যে এই কৌশলটির সঠিক সম্পাদন দেখায়। আপনার দ্বিতীয় পদ্ধতিটি জিজ্ঞাসিত প্রশ্নের উত্তর দেয় না এবং ইতিমধ্যে oLinkWeb ডেভেলপমেন্ট সরবরাহ করেছিল।
মিকম্যাকুসা

-1
$str = "Hello there folks!"
$str_ex = explode("there, $str, 2);   //explodes $string just twice
                                      //outputs: array ("Hello ", " folks")
$str_final = implode("", $str_ex);    // glues above array together
                                      // outputs: str("Hello  folks")

আরও একটি অতিরিক্ত জায়গা রয়েছে তবে এটি আমার ক্ষেত্রে ব্যাকগ্রাউন্ড স্ক্রিপ্টের মতো হ'ল।


এই কৌশলটি ২০০৯ সালে টমুচফ্প দ্বারা সরবরাহ করা হয়েছিল ! আমি হ্রাস পেয়েছি কারণ আপনার পোস্টটি গবেষকদের কোনও নতুন মূল্য যুক্ত করে না। কোনও উত্তর পোস্ট করার আগে দয়া করে নিশ্চিত হয়ে নিন যে আপনার সমাধানটি পৃষ্ঠায় অনন্য এবং পৃষ্ঠাটির মূল্য যুক্ত করে।
মিকম্যাকুসা

-3

এটি এখানে আমার প্রথম উত্তর, আমি এটি সঠিকভাবে করতে আশা করি। এই সমস্যাটির জন্য কেন ত্রুটিযুক্ত স্থানটির চতুর্থ যুক্তি ব্যবহার করবেন না?

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

গণনা: পাস হয়ে গেলে, এটি সম্পাদিত প্রতিস্থাপনের সংখ্যায় সেট করা হবে।


সম্পাদনা: এই উত্তরটি ভুল, কারণ স্ট্রিমেরপ্লেসের ৪ র্থ পরামিতি একটি পরিবর্তনশীল যা প্রতিস্থাপনের সংখ্যা নির্ধারিত হয়। এটি প্রিগ_রেপ্লেসের সাথে সঙ্গতিপূর্ণ নয় , যার একটি চতুর্থ প্যারামিটার $limitএবং একটি 5 তম প্যারামিটার রয়েছে &$count


চতুর্থ আর্গুমেন্টগুলি str_replace () দ্বারা প্রতিস্থাপনের সংখ্যার জন্য সেট করা হবে। এ কারণেই আপনি যখন কোনও পূর্ণসংখ্যার সাথে এর পরিবর্তনশীল না হয়ে পাস করেন আপনি ত্রুটি পান।
আর্মিনরোসু

-6

কেবলমাত্র প্রথম বা প্রথম দুটি দম্পতির প্রতিস্থাপনের সমাধান খুঁজে পাওয়া সহজ (কাউন্টের মান দিয়ে)। শেষ বা শেষ দম্পতির উদাহরণটি প্রতিস্থাপনের জন্য খুব বেশি সমাধান নেই।

হয়তো str_replace এর মতো কিছু ($ সন্ধান, $ প্রতিস্থাপন, $ বিষয়, -3) শেষ তিনটি দৃষ্টান্ত প্রতিস্থাপন করা উচিত।

যাইহোক, কেবল একটি পরামর্শ।


4
দু'বছর আগে যখন উত্তর গৃহীত হয়েছে তখন একটি পরামর্শ দিয়ে কেন একটি প্রশ্নের উত্তর দিন ?!
mbinette

এছাড়াও -3 পরামিতি হিসাবে কাজ করবে না, কারণ 4 র্থ প্যারামিটার আউটপুট এবং ইনপুট প্যারামিটার নয়। কোডটি ক্র্যাশ হওয়ার পরিবর্তে আপনি কী প্রস্তাব করেছেন তার পরীক্ষার চেয়ে ভাল হবে।
ঘোস্ট রাইটার 78

হ্যাঁ, এটি ভুল, তবে আমি কেন চেষ্টা করার পরে খালি পর্দার ক্রাশ পাব? আমি স্বাভাবিক ত্রুটি_বন্দরের (E_ALL) করেছি; ini_set ("প্রদর্শন_প্রত্যেক", 1); এখনও ফাঁকা স্ক্রিন ত্রুটি।
ডগ ক্যাসিডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.