2009-09-03 38 views
89

Có thể thêm một mảng kết hợp với cặp khóa => giá trị bằng chữ? Tôi biết rằng array_unshift() làm việc với các phím số, nhưng tôi hy vọng cho một cái gì đó mà sẽ làm việc với các phím chữ.Mảng kết hợp chuẩn bị PHP 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'); 

Trả lời

172

thể bạn không chỉ cần làm:

$resulting_array = $array2 + $array1; 

?

+13

Xem thêm array_merge() và sự khác biệt của nó khi sử dụng toán tử +: http://br.php.net/manual/en/function.array-merge.php#92602 – Havenard

+2

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

+1

@Havenard: Cảm ơn thông tin bổ sung. –

4

@Cletus đã được phát hiện. 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); 
+0

@karim: Rất hữu ích - cảm ơn. –

+4

Như một lưu ý trễ, 'ksort' trả về boolean, do đó, ở trên cần được thực hiện như hai câu lệnh không phải là một, ví dụ: '$ a = $ array1 + $ mảng2; ksort ($ a); ', nếu không' $ result_array' sẽ là một giá trị boolean không phải là mảng mà bạn mong đợi. –

13

Trong trường hợp 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 vào trước một giá trị duy nhất, cho một mảng kết hợp, thay vì array_unshift(), một lần nữa sử dụng array_merge():

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

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 cặp khóa-giá trị.

Tuy nhiên bạn có thể tạo mảng mới chứa cặp khóa-giá trị mới ở đầu mảng bằng toán tử union +. Kết quả là một mảng hoàn toàn mới và 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 giữ lại các phím số.

Các vấn đề liên quan