เทียบเท่ากับ. = สำหรับการเพิ่มที่จุดเริ่มต้นของสตริงใน PHP?


104

แค่สงสัยว่ามีบางอย่างเช่น. = สำหรับการเพิ่มข้อความที่จุดเริ่มต้นของสตริงเช่น:

$foo =. 'bar';

ซึ่งไม่ได้ผล

แก้ไข: ตัวอย่างเดิม$foo =. $bar;ซึ่งสามารถทำได้ด้วย$bar .= $foo;


ฉันรับรองเจมส์ 'แม้ว่าเขาควรจะเขียนคำตอบให้ก็ตาม ...
Christian

6
ที่ผนวก$fooการ$barแทน prepending ไป$bar $fooผลที่ได้คือที่คล้ายกัน $fooแต่ผมคิดว่าเขาต้องการที่จะกลายพันธุ์
Eric V

มันหมายถึงการแสดงความคิดเห็นแบบลิ้นปี่ (นั่นคือเหตุผลว่าทำไมจึงเป็นความคิดเห็นไม่ใช่คำตอบ)!
James Allardice

1
ฮึ ... ขออภัยตัวอย่างที่ไม่ดี ... แก้ไขแล้ว :)
yuttadhammo

คำตอบ:



4

คุณสามารถสร้างฟังก์ชันของคุณเองได้เสมอ:

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

$stringจะเป็นส่วนที่คุณต้องการนำหน้าและ$chunkจะเป็นข้อความที่คุณต้องการให้มีบางอย่างนำหน้า

คุณสามารถพูดได้ว่าการตรวจสอบเป็นทางเลือก แต่เมื่อมีสิ่งนั้นคุณไม่จำเป็นต้องกังวลเกี่ยวกับการส่งผ่านค่าว่างโดยบังเอิญ


1
ขอบคุณคุณพูดถูกแล้ว มันไม่ง่ายหรือเร็วเท่าของที่มีอยู่แล้วอย่าลังเลที่จะคัดลอกและวางหากสิ่งนั้นช่วยให้ง่ายขึ้น: D
Aaron

7
หากมีบางอย่างอยู่!emptyเสมอก็issetไม่จำเป็นต้องตรวจสอบซ้ำ นอกจากนี้เนื่องจาก$chunkเป็นพารามิเตอร์ที่จำเป็นของฟังก์ชันจึงจำเป็นต้องส่งผ่านไปยังฟังก์ชันมิฉะนั้น PHP จะบ่น ซึ่งหมายความว่าเช็คนี้สามารถย่อได้ว่าif ($chunk)(เพื่อดูว่าเป็นเท็จหรือที่เรียกว่า "ว่างเปล่า") แต่ถ้า$chunkไม่มีอะไรก็จะไม่มีอะไรเกิดขึ้นอยู่ดี ดังนั้นจึงย่อเนื้อหาฟังก์ชันทั้งหมดนี้return $string . $chunkได้ ซึ่งหมายความว่าฟังก์ชันทั้งหมดนี้ไม่จำเป็นเลยทีเดียว
หลอกลวง

1
คุณสามารถตั้งค่าตัวแปรได้ แต่จะว่างเปล่า ตัวอย่างเช่นตัวแปรที่มีค่าเป็น "" ว่างเปล่า แต่ตั้งค่าด้วย
Aaron

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" */

น่าเสียดายที่ฉันไม่คิดว่า sprintf () จะเร็วเท่ากับการต่อสายอย่างง่าย และแน่นอนว่าดูเหมือนจะไม่เป็นมิตรกับไวยากรณ์ด้วยเช่นกัน ดู: stackoverflow.com/q/7147305/2430549
HoldOffHunger

ถูกต้องแม้ว่าจะไม่แน่ใจว่าคุณหมายถึงความเป็นมิตรกับไวยากรณ์อย่างไร แม้ว่ามันจะไม่เร็วหรือง่ายเท่ากับการเชื่อมต่อ sprintfมักใช้ในหลายภาษา sprintfมีสถานที่และวัตถุประสงค์ในการใช้งานเมื่อใด เช่น. หล่อของค่าหลายหรือการบังคับใช้จำนวนของปัจจัยการผลิตโดยใช้sprintfให้คุณกับการทำงานมากขึ้นกว่าที่เรียงต่อกันง่ายเมื่อถูกต้อง ดู: 3v4l.org/8PWilแต่ไม่ควรใช้แทนการเรียงต่อกันอย่างสมบูรณ์
fyrye

3

คุณสามารถรวมฟังก์ชันในตัวsubstr_replaceโดยที่อาร์กิวเมนต์ $ start และ $ length สามารถตั้งค่าเป็น 0 ได้ซึ่งจะนำค่า $ ทดแทนเป็น $ string ล่วงหน้าและส่งกลับผลลัพธ์ดังนี้:

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;

หากคุณเข้าร่วมการเขียนโปรแกรมขั้นตอนนั่นคือ


ฉันไม่เห็นความสนใจในการใช้ substr_replace การทำง่ายๆ$string = $prefix.$string;ในฟังก์ชั่นจะทำเคล็ดลับ
Pierre-Olivier Vares

2

การเปลี่ยนความคิดเห็นของ Blakethepattonให้เป็นคำตอบ (ขอบคุณ) วิธีที่จะทำสิ่งนี้ให้เรียบร้อยยิ่งขึ้นสำหรับชื่อตัวแปรที่ยาวขึ้นคือการใช้การอ้างอิงตัวแปรดังนี้:

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

วิธีนี้จะช่วยให้คุณไม่ต้องพิมพ์คำตอบของ Eric Vหากชื่อตัวแปรเดิมของคุณยาว 12 อักขระขึ้นไป

ทางเลือกในหนึ่งบรรทัด:

$f = 'bar' . ($f = &$foo);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.