จะเชื่อมชื่อตัวแปร PHP เข้าด้วยกันได้อย่างไร?

ฉันมี PHP สำหรับการวนซ้ำ:

for ($counter=0,$counter<=67,$counter++){

echo $counter;
$check="some value";

}

สิ่งที่ฉันพยายามทำให้สำเร็จคือใช้ตัวแปร for loop และผนวกเข้ากับชื่อของตัวแปรอื่น

โดยพื้นฐานแล้ว ฉันต้องการให้เอาต์พุต PHP เป็นดังนี้สำหรับแต่ละแถว

1
$check1="some value"

2
$check2="some value"

3
$check3="some value"

4
$check4="some value"

etc etc 

ฉันได้ลอง $check.$counter="some value" แล้ว แต่ล้มเหลว

ฉันจะบรรลุเป้าหมายนี้ได้อย่างไร? ฉันพลาดบางสิ่งบางอย่างที่ชัดเจนไปหรือเปล่า?


person Smudger    schedule 31.07.2012    source แหล่งที่มา
comment
การใช้ array จะดีกว่าวิธีนี้หรือไม่ $myVar = array(); for($i = 0; $i <= 67; $i++) { $myVar[] = "Some Value"; }   -  person Matt    schedule 31.07.2012


คำตอบ (4)


ไวยากรณ์ที่เหมาะสมสำหรับ ตัวแปรตัวแปร คือ:

${"check" . $counter} = "some value";

อย่างไรก็ตาม ฉันไม่สนับสนุนอย่างยิ่งสิ่งนี้ สิ่งที่คุณพยายามทำให้สำเร็จมักจะสามารถแก้ไขได้อย่างสวยงามยิ่งขึ้นโดยใช้ อาร์เรย์. ตัวอย่างการใช้งาน:

// Setting values
$check = array();
for ($counter = 0; $counter <= 67; $counter++){
    echo $counter;
    $check[] = "some value";
}

// Iterating through the values
foreach($check as $value) {
    echo $value;
}
person Tim Cooper    schedule 31.07.2012
comment
ขอบคุณทิม มีสถานการณ์ใดบ้างที่ยอมรับได้หรือฟังก์ชันนี้ไม่ได้ใช้อีกต่อไปแล้ว - person Smudger; 31.07.2012
comment
@Smudger: ฉันไม่สามารถนึกถึงกรณีที่ชัดเจนที่จะใช้ตัวแปรตัวแปรได้ การดู ความคิดเห็นในหน้าเอกสารประกอบ อาจช่วยให้คุณทราบบางส่วน แนวคิดเกี่ยวกับจุดที่อาจเป็นประโยชน์ เพียงจำไว้ว่าสิ่งที่คุณอ่านที่นั่นอาจไม่ถือเป็นแนวปฏิบัติที่ดีที่สุด - person Tim Cooper; 31.07.2012
comment
การต่อข้อมูลไม่ใช่วิธีแก้ปัญหาที่สะอาดกว่า แต่อาจมีบางกรณีที่คุณมีโค้ดเก่าที่มีการพัฒนาขั้นสูงซึ่งไม่เคยมีจุดมุ่งหมายเพื่อเชื่อมโยง A+B โดยที่การทำเช่นนี้ง่ายกว่าการเขียนโค้ดหลายร้อยบรรทัดใหม่เพียงเพื่อแทนที่ตัวแปรเก่า ประเภทที่มีอาร์เรย์ - person Nosajimiki; 14.07.2017
comment
กรณีหนึ่งที่ฉันนึกถึงได้ว่าฉันใช้มันที่ไหนคือรูปแบบ HTML ที่ฉันสร้างอินพุตแบบเรียกซ้ำ เมื่อคุณโพสต์ มันจะโพสต์เป็นกลุ่มของตัวแปรและไม่ใช่เป็นอาร์เรย์ ดังนั้นการเรียกซ้ำอาจจะง่ายกว่าด้วย $_POST[${myInputName.$i}] - person Nosajimiki; 14.07.2017

คุณควรใช้ไวยากรณ์ ${'varname'}:

for ($counter=0,$counter<=67,$counter++){
    echo $counter;
    ${'check' . $counter} ="some value";
}

สิ่งนี้จะได้ผล แต่ทำไมไม่ใช้อาร์เรย์ล่ะ?

$check[$counter] = "some value";
person Adunahay    schedule 31.07.2012

สิ่งนี้ใช้ได้ในบางกรณี ตัวอย่างเช่น หากแอปของคุณมีรายการภาษาประมาณ 2 ภาษาใน DB

echo $this->{'article_title_'.$language};

มันมีประโยชน์มากกว่าตัวอย่างนี้มาก

if($language == 'mylanguage1')
    echo $this->article_title_mylanguage1;
else
    echo $this->article_title_mylanguage2;

แน่นอนว่านี่คือสิ่งที่คุณไม่ควรทำในแอปหลายภาษา แต่ฉันเคยเห็นกรณีเช่นนี้

person arma    schedule 09.07.2013
comment
ใช่ มันเป็นกรณีของฉัน: ฉันมี 3 คอลัมน์ในฐานข้อมูล ดังนั้นฉันจึงต้องวนซ้ำแบบนั้นจากกลุ่มช่องทำเครื่องหมาย - person Pathros; 22.09.2018

อาร์เรย์จะทำสิ่งนี้ให้สำเร็จ

$check = array();

for($counter = 0; $counter <= 67; $counter++) {
    $check[] = "some value";
    var_dump($check[$counter]);
}
person Matt    schedule 31.07.2012