Menu

array_push() trong PHP: thêm phần tử vào mảng

array_push($arr, $value) thêm một hoặc nhiều giá trị vào cuối mảng; $arr[] = $value làm điều tương tự cho một giá trị và nhanh hơn. Tìm hiểu cách thêm vào cuối, đầu hoặc giữa mảng, thêm khóa và giá trị, và tránh bug kinh điển với giá trị trả về.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

array_push($arr, $value) thêm một giá trị vào cuối mảng. Với một giá trị duy nhất, cách viết tắt $arr[] = $value; làm cùng việc mà không cần gọi hàm, và đây là cách phần lớn code PHP sử dụng. Cả hai đều thay đổi trực tiếp mảng.

array_push() nhận mảng theo tham chiếu, nên nó thay đổi chính biến bạn truyền vào. Hàm trả về số phần tử mới, và bạn có thể bỏ qua giá trị này.

array_push vs $arr[] =

Dùng $arr[] = $value cho một giá trị: ngắn hơn và không phải gọi hàm, điều này cộng dồn lại đáng kể trong một vòng lặp lớn. Dùng array_push() khi bạn có nhiều giá trị cần thêm trong một câu lệnh, hoặc một danh sách giá trị cần spread vào.

$arr[] = cũng dùng được với một biến chưa tồn tại: PHP sẽ tạo mảng. array_push() cần một mảng có sẵn: với một biến chưa định nghĩa, hàm ném ra TypeError: array_push(): Argument #1 ($array) must be of type array, null given.

Thêm khóa và giá trị

array_push() chỉ nối thêm giá trị với khóa số nguyên kế tiếp. Để thêm một khóa có tên, hãy gán trực tiếp vào khóa đó. Để thêm nhiều cặp cùng lúc, dùng += (giữ các khóa đã có) hoặc array_merge() (để giá trị mới thắng).

Sự khác biệt giữa + và array_merge() khi trùng khóa được trình bày ở trang array_merge.

Thêm vào đầu mảng: array_unshift

array_unshift($arr, $value) chèn vào đầu mảng. Các khóa số nguyên được đánh số lại để giá trị mới nhận chỉ số 0; khóa chuỗi được giữ nguyên. Giống array_push(), hàm này nhận nhiều giá trị và trả về số phần tử mới.

Để đặt một cặp có tên lên đầu, hãy tạo một mảng mới: $menu = ['login' => '/login'] + $menu;.

Chèn vào một vị trí cụ thể

array_splice($arr, $offset, 0, $values) chèn mà không xóa gì: nó bắt đầu tại $offset, xóa 0 phần tử và đặt các giá trị mới vào đó. Các khóa số nguyên sau điểm chèn được đánh số lại.

array_splice() còn có thể xóa và thay thế phần tử; trang về cách xóa phần tử trình bày các dạng đó.

Nối thêm một mảng khác

array_push($a, $b) thêm $b thành một phần tử lồng nhau duy nhất, hiếm khi là điều bạn muốn. Để thêm lần lượt từng giá trị của $b, hãy spread chúng, hoặc tạo một mảng mới bằng cú pháp spread hay array_merge().

Lỗi thường gặp: gán giá trị trả về

array_push() trả về một con số, là số phần tử mới. Gán số đó ngược lại cho biến mảng sẽ thay mảng của bạn bằng một số nguyên, và lần array_push() tiếp theo trên biến đó sẽ ném ra TypeError.

Điều tương tự cũng đúng với array_unshift() và với sort(), hàm trả về true. Những hàm thay đổi trực tiếp mảng trả về một trạng thái, không phải mảng.

Câu hỏi thường gặp

array_push và $arr[] trong PHP khác nhau thế nào?

Cả hai đều thêm vào cuối mảng. $arr[] = $x; thêm một giá trị mà không cần gọi hàm, nên đây là lựa chọn thường dùng và nhanh hơn một chút. array_push($arr, $a, $b, $c) tiện khi bạn thêm nhiều giá trị cùng lúc, và hàm này trả về số phần tử mới.

Làm sao thêm khóa và giá trị vào mảng trong PHP?

Gán vào khóa đó: $arr['color'] = 'blue';. array_push() không làm được việc này vì nó luôn dùng khóa số nguyên kế tiếp. Để thêm nhiều cặp cùng lúc, hãy dùng $arr += ['a' => 1, 'b' => 2]; hoặc array_merge().

Làm sao thêm phần tử vào đầu mảng trong PHP?

Dùng array_unshift($arr, $value). Hàm này đánh số lại các khóa số nguyên để giá trị mới nhận chỉ số 0; khóa chuỗi được giữ nguyên.

Vì sao mảng của tôi biến thành một con số sau array_push?

Vì array_push() trả về số phần tử mới chứ không trả về mảng. Viết $arr = array_push($arr, 'x'); sẽ thay mảng bằng con số đó. Hãy gọi hàm trên một dòng riêng: array_push($arr, 'x');.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu