การเพิ่มรายการไปยังอาร์เรย์ที่เชื่อมโยง


90
//go through each question
foreach($file_data as $value) {
   //separate the string by pipes and place in variables
   list($category, $question) = explode('|', $value);

   //place in assoc array
   $data = array($category => $question);
   print_r($data);

}

สิ่งนี้ใช้ไม่ได้เนื่องจากแทนที่ค่าของข้อมูล ฉันจะเพิ่มค่าเชื่อมโยงแต่ละลูปได้อย่างไร $file_dataคืออาร์เรย์ของข้อมูลที่มีขนาดไดนามิก

คำตอบ:


98

ฉันคิดว่าคุณต้องการ $data[$category] = $question;

หรือในกรณีที่คุณต้องการอาร์เรย์ที่แมปหมวดหมู่กับคำถามอาร์เรย์:

$data = array();
foreach($file_data as $value) {
    list($category, $question) = explode('|', $value, 2);

    if(!isset($data[$category])) {
        $data[$category] = array();
    }
    $data[$category][] = $question;
}
print_r($data);

9
โปรแกรมเมอร์คนอื่น ๆ จะเกลียดคุณที่พิมพ์ผิดแม้ว่าพวกเขาจะถูกบังคับให้ทำเช่นกันหรือแก้ไข
ThiefMaster

ฉันรู้สึกสบายใจกับ array_push มากเกินไปลืมพื้นฐาน! เป็นประโยชน์จริงๆ!
CLOUGH

122

คุณสามารถทำได้ง่ายๆ

$data += array($category => $question);

หากคุณใช้ php 5.4+

$data += [$category => $question];

9
นี่คือคำตอบที่ถูกต้องสำหรับการเพิ่มรายการในอาร์เรย์ที่เชื่อมโยง
andreszs

7
เพิ่มหลายองค์ประกอบด้วย: $ data + = ['x' => 1, 'y' => 2];
แยก 19

นี่เป็นวิธีที่หากคุณไม่ต้องการลงเอยด้วยวัตถุมากกว่าหนึ่งชิ้นในอาร์เรย์
DragonFire

หมายเหตุ: สามารถทำงานได้หากอาร์เรย์ของคุณยังไม่มีองค์ประกอบที่มีคีย์เดียวกันดังนั้นจึงไม่สามารถเขียนทับองค์ประกอบที่มีอยู่ได้
Mohamad Hamouday

29

ก่อนสำหรับลูป:

$data = array();

จากนั้นในวงของคุณ:

$data[] = array($catagory => $question);

2
หากคุณทำเช่นนั้นอย่าลืมเริ่มต้นอาร์เรย์ก่อนโดยใช้ $ data = array (); ไม่เช่นนั้น php จะแจ้งให้ทราบล่วงหน้า
Alex Bailey

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

4
ไม่ได้ผลเพราะสร้างอาร์เรย์ภายในอาร์เรย์ ขออภัยหากคำถามของฉันผ่านคุณไป
ฟิล

PHP 5.4+ คุณสามารถเขียนโค้ดได้น้อยลง:$data=[]; $data[] = [$category => $question];
Justin

$res = array(); $res[] = array('foo' => $bar); $foo = $res['foo'];ล้มเหลวด้วยดัชนีที่ไม่ได้กำหนด: foo in ..แต่เครื่องหมายบวกที่แนะนำด้านล่างใช้งานได้
qrtLs

7

ฉันรู้ว่านี่เป็นคำถามเก่า แต่คุณสามารถใช้:

array_push($data, array($category => $question));

นี้จะผลักดันเข้าสู่การสิ้นสุดของปัจจุบันของคุณarray arrayหรือถ้าคุณแค่พยายามเพิ่มค่าเดียวที่ท้ายอาร์เรย์ของคุณไม่ใช่อาร์เรย์เพิ่มเติมคุณสามารถใช้สิ่งนี้:

array_push($data,$question);

6

สำหรับใครก็ตามที่ต้องการเพิ่มลงในอาร์เรย์ 2d Associative คุณสามารถใช้คำตอบที่ระบุไว้ด้านบนและใช้รหัสเช่นนี้

 $data[$category]["test"] = $question

จากนั้นคุณสามารถเรียกมันได้ (เพื่อทดสอบผลลัพธ์โดย:

echo $data[$category]["test"];

ซึ่งควรพิมพ์ $ question

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