Làm thế nào để chèn một mục vào đầu một mảng trong PHP?


167

Tôi biết làm thế nào để chèn nó vào cuối bằng cách:

$arr[] = $item;

Nhưng làm thế nào để chèn nó vào đầu?


2
$arr[-1] = $item;Tìm thấy ở đây: stackoverflow.com/a/15252657/669677

4
@ 2astalavista, điều đó không hoạt động: print_r($arr)=>Array ( [0] => a, [1] => b, [-1] => c )
laurent

@ returnthis.lau_ trường hợp này bạn nên sử dụng cho vòng lặp - bắt đầu từ -1 - để làm cho nó hoạt động: for ($i = -1; $i < count($a)-1; $i++)như liên kết được tham chiếu cho thấy, nhưng rất dễ quên, vì vậy tôi không thích giải pháp đó nữa.

Câu trả lời:


267

Sử dụng mảng_unshift ($ mảng, $ item);

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

sẽ cho bạn

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

7
Còn nếu bạn cần các khóa bằng chữ, thay vì số, thì sao?
Evan

4
@ Evan, tài liệu cho array_unshiftbiết những điều sau đâyAll numerical array keys will be modified to start counting from zero while literal keys won't be touched.
vươn

1
Có hai vấn đề: 1) reindexing mảng 2) không thể thêm mục với chỉ mục.
Nabi KAZ

2
Nếu bạn có một mảng kết hợp hoặc cần bảo tồn các khóa thì hãy xem các ví dụ người dùng ở đây: php.net/manual/en/feft.array-unshift.php có một vài ví dụ hay về cách thực hiện điều này!
Vallier

112

Trong trường hợp mảng kết hợp hoặc mảng được đánh số mà bạn không muốn thay đổi các khóa mảng:

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

$arr = $firstItem + $arr;

array_merge không hoạt động vì nó luôn reindex mảng.


6
Đây thực sự là câu trả lời tốt nhất!
Ankit

5
Chú ý! "Toán tử + trả về mảng bên phải được gắn vào mảng bên trái; đối với các khóa tồn tại trong cả hai mảng, các phần tử từ mảng bên trái sẽ được sử dụng và các phần tử khớp từ mảng bên phải sẽ được làm ngơ." - Xem: stackoverflow.com/a/2140094
43211766

Giải pháp rất tốt vì có thể thêm mục với chỉ mục và không giới thiệu lại mảng; Nhưng chỉ có một lưu ý về loại bỏ mục trong mảng bên phải, nếu có cùng chỉ mục trong mảng bên trái.
Nabi KAZ


6

Chèn một mục vào đầu một mảng kết hợp với khóa chỉ mục chuỗi / tùy chỉnh

<?php

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

$array = array_reverse($array);

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

$array = array_reverse($array);

KẾT QUẢ

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


4

Sử dụng mảng_unshift () để chèn phần tử đầu tiên vào một mảng.

Người dùng mảng_shift () để loại bỏ phần tử đầu tiên của một mảng.


4

Hoặc bạn có thể sử dụng mảng tạm thời và sau đó xóa mảng thực nếu bạn muốn thay đổi nó trong chu kỳ:

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

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

đầu ra sẽ là:

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

và khi đang thực hiện nó trong chu kỳ, bạn nên dọn dẹp $temp_arraysau khi nối thêm mục vào mảng.


1

Với chỉ mục tùy chỉnh:

$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
một mảng không thể ghép nối như thế này
Battle Hawk

Có lẽ anh ta có nghĩa là sử dụng dấu cộng (+) thay vì dấu phẩy (.)
Erdinç orbacı

1

Đối với một mảng kết hợp, bạn chỉ có thể sử dụng hợp nhất.

$arr = array('item2', 'item3', 'item4');
$arr = array_merge(array('item1'), $arr)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.