2011-12-16 27 views
14

Trong PHP, (cho rằng $a, $b$c là mảng) là $a = array_replace($b, $c) luôn chức năng giống với $a = $c + $b?array_replace() vs điều hành công đoàn trong PHP

Tôi dường như không thể tìm thấy bất kỳ trường hợp cạnh nào có thể chỉ ra khác.

(chỉ làm việc với một chiều, câu hỏi này là không quan tâm đến đệ quy, tức là: array_replace_recursive())


Sửa: Tôi tìm thấy một lưu ý trong một chú thích gợi ý rằng các nhà điều hành công đoàn sẽ lưu giữ tài liệu tham khảo, nhưng tôi đã không nhận thấy array_replace() không làm điều đó.

Trả lời

8

EDIT: Rất tiếc, tôi không nhận thấy các đối số đã bị đảo ngược. Câu trả lời là có, sau đó, vì mảng kết quả luôn có hai mảng được sáp nhập, nhưng trong khi + ưu tiên các giá trị trong mảng đầu tiên và array_replace đến mảng thứ hai.

Sự khác biệt thực sự duy nhất là về hiệu suất, trong đó +có thể thích hợp hơn vì khi tìm thấy trùng lặp, nó không thay thế giá trị; nó chỉ di chuyển trên. Thêm vào đó, nó không đòi hỏi một cuộc gọi hàm (tương đối đắt tiền).


số array_replace thay thế các yếu tố, trong khi + xem xét giá trị đầu tiên:

<?php 
print_r(array_replace([0 => 1], [0 => 2])); 
print_r([0 => 1] + [0 => 2]); 
 
Array 
(
    [0] => 2 
) 
Array 
(
    [0] => 1 
) 

Để cite hướng dẫn:

Toán tử + trả về mảng bên phải 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ử phù hợp từ mảng bên phải sẽ bị bỏ qua.

Đối với tham chiếu, chúng được giữ nguyên trong cả hai trường hợp.

+2

Hãy nhìn! Cú pháp mảng viết tắt mới trong PHP 5.4! – BoltClock

+0

Ngoạn mục, cảm ơn @Artefacto - Tôi đã nhận ra rằng, mặc dù tôi lo ngại về một số trường hợp không có giấy tờ (* như tôi đã nhận thấy PHP có phần khét tiếng *) – Dan

+1

Tôi đã tìm thấy một hình ảnh đẹp và mô tả giải thích đầy đủ sự khác biệt: https://softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/ –

6

Cũng nên đề cập rằng array_merge cũng hoạt động giống như array_replace nếu các mảng được cung cấp có các phím không phải là số.

+0

đây là nhận xét nhiều hơn câu trả lời cho câu hỏi :) – Kamafeather

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