PHP thêm mảng kết hợp với các khóa chữ?


112

Có thể thêm một mảng kết hợp với các cặp giá trị => khóa theo nghĩa đen không? Tôi biết rằng array_unshift () hoạt động với các phím số, nhưng tôi hy vọng điều gì đó sẽ hoạt động với các phím chữ.

Như một ví dụ tôi muốn làm như sau:

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

// prepend magic

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

Câu trả lời:


219

Bạn không thể chỉ làm:

$resulting_array = $array2 + $array1;

?


15
Xem thêm array_merge () và sự khác biệt của nó so với việc sử dụng toán tử +: br.php.net/manual/en/ Chức năng.array
merge.php

2
@cletus: Sheesh. Vâng, tôi có thể. Không chắc điều gì khiến tôi nghĩ rằng mình không thể hoặc điều gì đã không hoạt động trước đây. Cảm ơn vì sự trả lời.
Colin Brock

Cần lưu ý sự khác biệt nhưng sự khác biệt đó có liên quan đến việc bảo toàn các khóa số và mảng này là một mảng kết hợp "thuần túy" với các khóa chuỗi.
cletus

29

Câu trả lời là không. Bạn không thể thêm một mảng kết hợp với một cặp khóa-giá trị.

Tuy nhiên, bạn có thể tạo một mảng mới có chứa cặp khóa-giá trị mới ở đầu mảng bằng toán tử union +. Tuy nhiên, kết quả là một mảng hoàn toàn mới và việc tạo mảng mới có độ phức tạp O (n).

Cú pháp dưới đây.

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

Lưu ý: Không sử dụng array_merge (). array_merge () ghi đè các khóa và không bảo toàn các khóa số.


"ghi đè các khóa và không bảo toàn các khóa số" ... a) Toán tử union ("+") xử lý các khóa "trùng lặp" như thế nào? re: không bảo toàn các phím số: có thể mong muốn
Brad Kent

16

Trong tình huống của bạn, bạn muốn sử dụng array_merge ():

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

Để thêm một giá trị đơn lẻ, cho một mảng kết hợp, thay vì array_unshift (), hãy sử dụng lại array_merge ():

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

5

@Cletus là đúng. Chỉ cần thêm, nếu thứ tự của các yếu tố trong mảng đầu vào là mơ hồ, và bạn cần các mảng thức để được sắp xếp, bạn có thể muốn ksort :

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

4
Như một lưu ý muộn, ksorttrả về boolean, vì vậy điều trên cần được thực hiện dưới dạng hai câu lệnh không phải là một, ví dụ: $a = $array1 + $array2; ksort($a);nếu không $resulting_arraysẽ là một giá trị boolean không phải là mảng mà bạn mong đợi.
El Yobo

3

Sử dụng phương thức tương tự như @mvpetrovich, bạn có thể sử dụng phiên bản viết tắt của một mảng để rút ngắn cú pháp.

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

Người giới thiệu:

PHP: array_merge ()

PHP: Mảng - Thủ công

Kể từ PHP 5.4, bạn cũng có thể sử dụng cú pháp mảng ngắn, thay thế mảng () bằng [].

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.