পিএইচপি মধ্যে স্ট্রিং শুরু করার জন্য। = এর সমতুল্য?


103

স্ট্রিংয়ের শুরুতে টেক্সট যুক্ত করার জন্য। = এর মতো কিছু রয়েছে কিনা তা কেবল ভাবছেন:

$foo =. 'bar';

যা কাজ করে না

সম্পাদনা করুন: উদাহরণটি মূলত $foo =. $bar;যা দিয়ে অর্জন করা যেতে পারে$bar .= $foo;


আমি জেমসের পক্ষে প্রত্যাশা করছি 'যদিও এর জন্য তার উত্তর লেখা উচিত ছিল ...
খ্রিস্টান

6
আপনার স্বাক্ষরে যে $fooকরতে $bar, পরিবর্তে prepending এর $barজন্য $foo। ফলাফলটি একই রকম, তবে আমি মনে করি তিনি পরিবর্তন করতে চান $foo
এরিক ভি

এটি কিছুটা জিভ-ইন-গাল মন্তব্য হতে বোঝানো হয়েছিল (যার কারণে এটি একটি মন্তব্য নয়, উত্তর নয়)!
জেমস আলার্ডাইস

1
উঃ ... দুঃখিত, খারাপ উদাহরণ ... এখনই ঠিক করা হয়েছে :)
yuttadhammo

উত্তর:



4

আপনি সর্বদা এটির জন্য নিজের ফাংশনটি তৈরি করতে পারেন:

function prepend($string, $chunk) {
     if(!empty($chunk) && isset($chunk)) {
        return $string.$chunk;
     }
     else {
        return $string;
     }
}

$stringআপনি যে টুকরোটি $chunkप्रीপেন্ড করতে চান তা হ'ল এটি এমন পাঠ্য যা আপনি এটিতে কিছুটা চাপিয়ে দিতে চান।

আপনি বলতে পারেন চেকগুলি alচ্ছিক, তবে সেখানে থাকার কারণে আপনাকে দুর্ঘটনাক্রমে নাল মান পাস করার বিষয়ে চিন্তা করার দরকার নেই।


1
ধন্যবাদ, আপনি ঠিক আছেন। এটি অবশ্যই কোনও অন্তর্নির্মিত হিসাবে সহজ বা দ্রুত নয়। যদি এটি আরও সহজ করতে সহায়তা করে তবে অনুলিপি অনুলিপি করুন এবং পেস্ট করুন: ডি
অ্যারন

7
যদি কিছু হয় !emptyতবে সর্বদা এটির issetজন্য এই ডাবল চেকের প্রয়োজন নেই। উপরন্তু, যেহেতু $chunkফাংশন একটি প্রয়োজনীয় পরামিতি, এটা প্রয়োজন ফাংশন প্রেরণ করে রাখা হবে বা পিএইচপি অভিযোগ হবে। এর অর্থ এই চেকটি সংক্ষেপে সংক্ষিপ্ত করা যেতে পারে if ($chunk)(এটি মিথ্যাবাদী ওরফে "খালি" কিনা তা দেখতে )। তবে, যদি $chunkকিছু না থাকে তবে যাইহোক কিছুই হবে না। সুতরাং এই পুরো ফাংশন বডি সংক্ষিপ্ত করা যেতে পারে return $string . $chunk। যার অর্থ এই পুরো ফাংশনটি বেশ অপ্রয়োজনীয়।
প্রতারণা করুন

1
আপনি একটি ভেরিয়েবল সেট করতে পারেন তবে খালিও থাকতে পারেন। উদাহরণস্বরূপ, "" এর মান সহ একটি ভেরিয়েবল খালি তবে সেটও রয়েছে।
অ্যারোন

1
হ্যাঁ, তবে আমি বলছি আপনার ফাংশনটি লেখার খুব ভার্জিক উপায় $foo . $bar। আমি আপনাকে চ্যালেঞ্জ জানালাম যে কোনও গুরুত্বপূর্ণ কেসটি যদি আপনার ফাংশনটি ভিন্ন কিছু করে থাকে তবে তা খুঁজে বার করুন। :)
প্রতারণা করুন

3

আমি জানি যে এটি জিজ্ঞাসা করা হয়েছিল / কিছুক্ষণ আগে উত্তর দেওয়া হয়েছিল, তবে এই উত্তরটি সরবরাহ করা কোনও কার্যনির্বাহী অপারেটর না হওয়া সত্ত্বেও এটি কার্যত সমতুল্য এবং সাধারণ স্ট্রিং কনটেন্টেশনের জন্য এর ব্যবহার সম্পর্কে কেউ মন্তব্য করেনি।

আপনি স্ট্রিং কনটেকটেশনের জন্য ফাংশনগুলির sprintf( ডকুমেন্টেশন ) পরিবারের ব্যবহার সন্ধান করতে পারেন । এটি কেবলমাত্র অ্যাসাইনমেন্ট অপারেটরগুলির সাথে দুটি স্ট্রিং সংমিশ্রণের চেয়ে অনেক বেশি স্যানিটাইজেশন এবং ব্যবহারযোগ্যতা সরবরাহ করে।

$foo = 'foo';

$append = sprintf('%1$s%2$s', $foo, 'bar');
var_dump($append);
/* string(6) "foobar" */

$prepend = sprintf('%1$s%2$s', 'bar', $foo);
var_dump($prepend);
/* string(6) "barfoo" */

$prependInvert = sprintf('%2$s%1$s', $foo, 'bar');
var_dump($prependInvert);
/* string(6) "barfoo" */

$wrap = sprintf('%2$s%1$s%2$s', $foo, 'bar');
var_dump($wrap);
/* string(6) "barfoobar" */

আমি সাধারণত ব্যবহার করি vsprintf, যেহেতু অ্যারেগুলির সাথে কাজ করা স্বতন্ত্র যুক্তিগুলির চেয়ে মান অবস্থানগুলি পরিচালনা করা সহজ।

$vprepend = vsprintf('%2$s%1$s', array('foo', 'bar'));
var_dump($vprepend);
/* string(6) "barfoo" */

মানগুলির একটি অ্যারে সহ, implodeসহজ সরল স্ট্রিং কনটেনটেশনের জন্য মানগুলির ফলাফলগুলি সহজেই সেট করতে পারে ।

 var_dump(implode('', array('bar', 'foo')));
 /* string(6) "barfoo" */

দুর্ভাগ্যক্রমে, আমি মনে করি না যে স্প্রিন্টফ () সাধারণ কনটাক্টের মতো দ্রুত। এবং এটি অবশ্যই প্রায় সিনট্যাক্স-বান্ধব বলে মনে হয় না। দেখুন: stackoverflow.com/q/7147305/2430549
HoldOffHunger

সঠিক, যদিও সিনট্যাক্স বান্ধব দ্বারা আপনি কী বোঝাতে চাইছেন তা নিশ্চিত নয়। যদিও এটি তাত্পর্য হিসাবে তত দ্রুত বা সরল নয়। sprintfসাধারণত একাধিক ভাষায় ব্যবহৃত হয়। sprintfকখন এটি ব্যবহার করতে হবে তার তার জায়গা এবং উদ্দেশ্য রয়েছে। যেমন। একাধিক মান castালাই বা ব্যবহার করে বেশ কয়েকটি ইনপুট প্রয়োগ করা sprintf, যখন প্রয়োজন হয় সহজ কন্ডাক্যান্টেশনের চেয়ে বেশি কার্যকারিতা সরবরাহ করে । দেখুন: 3v4l.org/8PWil তবে এটি সংক্ষিপ্তকরণের জন্য সম্পূর্ণ প্রতিস্থাপন হিসাবে ব্যবহার করা উচিত নয়।
fyrye

3

আপনি অন্তর্নির্মিত ফাংশনটি substr_replaceগুটিয়ে রাখতে পারেন, যেখানে আর্গুমেন্টগুলি $ শুরু এবং $ দৈর্ঘ্য 0 তে সেট করা যেতে পারে, যা $ প্রতিস্থাপনটিকে $ স্ট্রিংয়ের প্রতিস্থাপন করে এবং ফলাফলটি যেমন প্রদান করে:

function prepend(& $string, $prefix) {
    $string = substr_replace($string, $prefix, 0, 0);
}

সহায়ক ফাংশনটির উদাহরণ ব্যবহার হ'ল:

$email_message = "Jonathan";
$appropriate_greeting = "Dear ";
prepend($email_message, $appropriate_greeting);
echo $email_message;

আপনি যদি প্রসেসরিয়াল প্রোগ্রামিংয়ে থাকেন তবে তা।


সাবস্ট্র_র্লেস ব্যবহারের আগ্রহ আমি দেখছি না; ফাংশনটিতে একটি সাধারণ $string = $prefix.$string;কাজ করা কৌশলটি করবে।
পিয়েরে-অলিভিয়ের ভার্সে

2

বাঁক Blakethepatton এর মন্তব্য একটি (তোমাকে ধন্যবাদ) জবাব অনুবাদ করে, এবং একটি উপায় আর পরিবর্তনশীল নামের জন্য আরো সুন্দরভাবে এই কাজ করতে একটি ব্যবহার করা রেফারেন্স নিম্নরূপ পরিবর্তনশীল হবে:

$f = &$foo; $f = "bar{$f}";

যদি আপনার আসল ভেরিয়েবলের নামটি 12 টি অক্ষর বা তার বেশি হয় তবে এটি আপনাকে এরিক ভি এর উত্তর দিয়ে টাইপ করে সংরক্ষণ করবে ।

এক লাইনে একটি বিকল্প:

$f = 'bar' . ($f = &$foo);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.