PHP นำหน้าอาร์เรย์ที่เชื่อมโยงด้วยคีย์ตัวอักษร?


112

เป็นไปได้หรือไม่ที่จะนำหน้าอาร์เรย์ที่เชื่อมโยงด้วยคู่คีย์ => ค่า ฉันรู้ว่า array_unshift () ใช้งานได้กับคีย์ตัวเลข แต่ฉันหวังว่าจะมีบางอย่างที่ใช้กับคีย์ตามตัวอักษรได้

ตัวอย่างเช่นฉันต้องการทำสิ่งต่อไปนี้:

$array1 = array('fruit3'=>'apple', 'fruit4'=>'orange');
$array2 = array('fruit1'=>'cherry', 'fruit2'=>'blueberry');

// prepend magic

$resulting_array = ('fruit1'=>'cherry', 
                    'fruit2'=>'blueberry', 
                    'fruit3'=>'apple', 
                    'fruit4'=>'orange');

คำตอบ:


219

คุณไม่สามารถทำได้:

$resulting_array = $array2 + $array1;

?


15
ดู array_merge () และความแตกต่างจากการใช้ตัวดำเนินการ +: br.php.net/manual/en/function.array-merge.php#92602
Havenard

2
@cletus: Sheesh. ใช่ฉันทำได้ ไม่แน่ใจว่าอะไรทำให้ฉันคิดว่าฉันทำไม่ได้หรืออะไรที่ไม่ได้ผลมาก่อน ขอบคุณสำหรับการตอบกลับ
Colin Brock

เป็นที่น่าสังเกตถึงความแตกต่าง แต่ความแตกต่างนั้นเกี่ยวข้องกับการรักษาคีย์ตัวเลขและอาร์เรย์นี้เป็นอาร์เรย์ที่เชื่อมโยงแบบ "บริสุทธิ์" ที่มีคีย์สตริง
cletus

29

คำตอบคือไม่ คุณไม่สามารถนำหน้าอาร์เรย์ที่เชื่อมโยงกับคู่คีย์ - ค่าได้

อย่างไรก็ตามคุณสามารถสร้างอาร์เรย์ใหม่ที่มีคู่คีย์ - ค่าใหม่ที่จุดเริ่มต้นของอาร์เรย์โดยใช้ตัวดำเนินการยูเนี่+ยน ผลลัพธ์คืออาร์เรย์ใหม่ทั้งหมดและการสร้างอาร์เรย์ใหม่มีความซับซ้อน O (n)

ไวยากรณ์อยู่ด้านล่าง

$new_array = array('new_key' => 'value') + $original_array;

หมายเหตุ: ห้ามใช้ array_merge () array_merge () เขียนทับคีย์และไม่เก็บคีย์ตัวเลข


"เขียนทับคีย์และไม่เก็บคีย์ตัวเลข" ... ก) ตัวดำเนินการยูเนี่ยน ("+") จัดการกับคีย์ "ซ้ำ" อย่างไร? re: ไม่เก็บคีย์ตัวเลข: น่าจะต้องการ
Brad Kent

16

ในสถานการณ์ของคุณคุณต้องการใช้ array_merge ():

array_merge(array('fruit1'=>'cherry', 'fruit2'=>'blueberry'), array('fruit3'=>'apple', 'fruit4'=>'orange'));

หากต้องการนำหน้าค่าเดียวสำหรับอาร์เรย์ที่เชื่อมโยงแทน array_unshift () ให้ใช้ array_merge () อีกครั้ง:

array_merge(array($key => $value), $myarray);

5

@Cletus เป็นจุด ๆ หากต้องการเพิ่มหากลำดับขององค์ประกอบในอาร์เรย์อินพุตไม่ชัดเจนและคุณต้องการเรียงลำดับอาร์เรย์สุดท้ายคุณอาจต้องการksort :

$resulting_array = $array1 + $array2;
ksort($resulting_array);

4
ตามบันทึกตอนท้ายksortจะส่งคืนบูลีนดังนั้นสิ่งที่กล่าวมาข้างต้นจะต้องทำเป็นสองคำสั่งไม่ใช่หนึ่งคำสั่งเช่น$a = $array1 + $array2; ksort($a);มิฉะนั้น$resulting_arrayจะเป็นค่าบูลีนไม่ใช่อาร์เรย์ที่คุณคาดหวัง
El Yobo

3

โดยใช้วิธีการเดียวกับ @mvpetrovich คุณสามารถใช้อาร์เรย์เวอร์ชันชวเลขเพื่อย่อรูปแบบไวยากรณ์ได้

$_array = array_merge(["key1" => "key_value"], $_old_array);

อ้างอิง:

PHP: array_merge ()

PHP: Arrays - คู่มือ

ใน PHP 5.4 คุณยังสามารถใช้ไวยากรณ์อาร์เรย์แบบสั้นซึ่งแทนที่ array () ด้วย []

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