จะแทรกรายการที่จุดเริ่มต้นของอาร์เรย์ใน PHP ได้อย่างไร


167

ฉันรู้วิธีแทรกไปยังจุดสิ้นสุดโดย:

$arr[] = $item;

แต่จะแทรกเข้าไปยังจุดเริ่มต้นได้อย่างไร


2
$arr[-1] = $item;พบที่นี่: stackoverflow.com/a/15252657/669677

4
@ 2astalavista นั่นไม่ได้ผล: print_r($arr)=>Array ( [0] => a, [1] => b, [-1] => c )
เร

@ returnthis.lau_ กรณีนี้คุณควรใช้สำหรับ loop - เริ่มจาก -1 - เพื่อให้มันใช้งานได้: for ($i = -1; $i < count($a)-1; $i++)ตามลิงค์ที่อ้างอิงพบ แต่มันง่ายที่จะลืมดังนั้นฉันไม่ชอบวิธีแก้ปัญหานี้อีก

คำตอบ:


267

ใช้array_unshift ($ array, $ item);

$arr = array('item2', 'item3', 'item4');
array_unshift($arr , 'item1');
print_r($arr);

จะให้คุณ

Array
(
 [0] => item1
 [1] => item2
 [2] => item3
 [3] => item4
)

7
ถ้าคุณต้องการตัวอักษรมากกว่าตัวเลข
Evan

4
@Evan เอกสารสำหรับarray_unshiftพูดว่าต่อไปนี้All numerical array keys will be modified to start counting from zero while literal keys won't be touched.
craned

1
มีสองปัญหา: 1) การทำดัชนีอาร์เรย์ใหม่ 2) ไม่สามารถเพิ่มรายการด้วยดัชนี
Nabi KAZ

2
หากคุณมีอาเรย์แบบเชื่อมโยงหรือจำเป็นต้องเก็บรักษาคีย์ให้ดูตัวอย่างผู้ใช้ที่นี่: php.net/manual/th/function.array-unshift.phpมีตัวอย่างที่ดีเกี่ยวกับวิธีการทำสิ่งนี้ให้สำเร็จ!
Vallier

112

ในกรณีของอาเรย์แบบเชื่อมโยงหรืออาเรย์ที่มีหมายเลขซึ่งคุณไม่ต้องการเปลี่ยนคีย์อาเรย์:

$firstItem = array('foo' => 'bar');

$arr = $firstItem + $arr;

array_merge ไม่ทำงานเนื่องจากจะทำดัชนีอาร์เรย์ซ้ำ


6
นี่เป็นคำตอบที่ดีที่สุดแน่นอน!
Ankit

5
ความสนใจ! "ผู้ประกอบการ + ส่งกลับอาร์เรย์ขวามือผนวกเข้ากับอาร์เรย์ซ้ายมือสำหรับคีย์ที่มีอยู่ในทั้งสองอาร์เรย์จะใช้องค์ประกอบจากอาร์เรย์ซ้ายมือและองค์ประกอบที่ตรงกันจากอาร์เรย์ขวามือจะ ละเว้น." - ดู: stackoverflow.com/a/2140094/3411766
คอตตัน

วิธีแก้ปัญหานั้นดีเพราะสามารถเพิ่มรายการด้วยดัชนีและไม่ได้ทำดัชนีอาร์เรย์อีกครั้ง แต่มีเพียงบันทึกย่อเกี่ยวกับการลบรายการในอาเรย์ด้านขวาหากมีดัชนีเดียวกันในอาเรย์ด้านซ้าย
Nabi KAZ


6

แทรกรายการในตอนต้นของอาร์เรย์ที่เชื่อมโยงกับคีย์สตริง / ดัชนีที่กำหนดเอง

<?php

$array = ['keyOne'=>'valueOne', 'keyTwo'=>'valueTwo'];

$array = array_reverse($array);

$array['newKey'] = 'newValue';

$array = array_reverse($array);

ผลลัพธ์

[
  'newKey' => 'newValue',
  'keyOne' => 'valueOne',
  'keyTwo' => 'valueTwo'
]


4

ใช้array_unshift ()เพื่อแทรกองค์ประกอบแรกในอาร์เรย์

User array_shift ()เพื่อลบองค์ประกอบแรกของอาร์เรย์


4

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

$array = array(0 => 'a', 1 => 'b', 2 => 'c');
$temp_array = $array[1];

unset($array[1]);
array_unshift($array , $temp_array);

ผลลัพธ์จะเป็น:

array(0 => 'b', 1 => 'a', 2 => 'c')

และเมื่อทำในขณะที่อยู่ในรอบคุณควรทำความสะอาด$temp_arrayหลังจากที่รายการต่อท้ายอาร์เรย์


1

ด้วยดัชนีที่กำหนดเอง:

$arr=array("a"=>"one", "b"=>"two");
    $arr=array("c"=>"three", "d"=>"four").$arr;

    print_r($arr);
    -------------------
    output:
    ----------------
    Array
    (
    [c]=["three"]
    [d]=["four"]
    [a]=["two"]
    [b]=["one"]
    )

1
อาร์เรย์ไม่สามารถต่อกันได้เช่นนี้
Battle Hawk

อาจเป็นเพราะเขาตั้งใจจะใช้เครื่องหมายบวก (+) แทนเครื่องหมายจุลภาค (.)
ErdinçÇorbacı

1

สำหรับอาร์เรย์ที่เชื่อมโยงคุณสามารถใช้การผสาน

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