Php sao chép mảng mà không cần tham chiếu
Các đối tượng trong PHP được gán theo tham chiếu, vì vậy việc sao chép một đối tượng bằng toán tử = sẽ dẫn đến một biến thứ hai tham chiếu đến cùng một đối tượng chứ không phải là một bản sao thực sự. Nhập chức năng sao chép của PHP để tạo một bản sao nông của đối tượng Show
Sử dụng = để sao chép một đối tượng chỉ sao chép tham chiếuĐể minh họa cách PHP chỉ tạo tham chiếu đến đối tượng ban đầu bằng toán tử =, hãy xem ví dụ sau. (Lưu ý rằng tôi đã gán = màu đỏ trong ví dụ) class foo {
public $bar;
}
$foo = new foo();
$foo->bar = 'baz';
$foo2 = $foo;
$foo2->bar = 'bat';
echo $foo->bar;
echo $foo2->bar;
Cả hai dòng echo ở cuối ví dụ sẽ lặp lại "bat" chứ không phải "baz" và "bat", bởi vì $foo2 là tham chiếu đến $foo và việc truy cập các thuộc tính cũng như gọi phương thức cho $foo2 thực sự là tham chiếu đến các thuộc tính và phương thức đó Sử dụng bản sao để sao chép và đối tượng sao chép đối tượngSử dụng cùng một ví dụ, nhưng sử dụng bản sao thay vì sao chép đối tượng sẽ dẫn đến một bản sao của đối tượng ban đầu. Việc thay đổi thuộc tính và phương thức gọi sẽ làm như vậy đối với đối tượng được sao chép chứ không phải đối tượng gốc Sự khác biệt duy nhất giữa ví dụ trên và ví dụ này là "=" trở thành "bản sao" được đánh dấu màu đỏ trong cả hai ví dụ class foo {
public $bar;
}
$foo = new foo();
$foo->bar = 'baz';
$foo2 = clone $foo;
$foo2->bar = 'bat';
echo $foo->bar . "n";
echo $foo2->bar . "n";
Ví dụ thứ hai xuất ra "baz" và sau đó là "bat" Bản sao nôngNhân bản một đối tượng tạo ra một bản sao "nông" của đối tượng ban đầu. Điều này có nghĩa là bất kỳ thuộc tính nào là tham chiếu đến các biến khác sẽ vẫn là tham chiếu đến các biến đó và không sao chép chính chúng Phương thức __cloneNếu đối tượng chứa phương thức __clone thì nó sẽ được gọi khi đối tượng được sao chép. Nó phải là một chức năng có thể truy cập công khai và không thể được gọi trực tiếp nếu không PHP sẽ kết thúc với một lỗi nghiêm trọng. Bạn sẽ không thực sự lặp lại đầu ra khi sao chép, nhưng nếu đối tượng được sao chép trong ví dụ bên dưới, nó sẽ lặp lại "tôi đã được sao chép" Sự khác biệt chính giữa bản sao và chế độ xem của một mảng là bản sao là một mảng mới và chế độ xem chỉ là chế độ xem của mảng ban đầu Bản sao sở hữu dữ liệu và mọi thay đổi đối với bản sao sẽ không ảnh hưởng đến mảng ban đầu và mọi thay đổi đối với mảng ban đầu sẽ không ảnh hưởng đến bản sao Chế độ xem không sở hữu dữ liệu và mọi thay đổi được thực hiện đối với chế độ xem sẽ ảnh hưởng đến mảng ban đầu và mọi thay đổi được thực hiện đối với mảng ban đầu sẽ ảnh hưởng đến chế độ xem SAO CHÉPVí dụTạo một bản sao, thay đổi mảng ban đầu và hiển thị cả hai mảng nhập numpy dưới dạng np arr = np. mảng([1, 2, 3, 4, 5]) in(mảng) Bản sao KHÔNG NÊN bị ảnh hưởng bởi những thay đổi được thực hiện đối với mảng ban đầu LƯỢT XEMVí dụTạo dạng xem, thay đổi mảng ban đầu và hiển thị cả hai mảng nhập numpy dưới dạng np arr = np. mảng([1, 2, 3, 4, 5]) in(mảng) Chế độ xem NÊN bị ảnh hưởng bởi những thay đổi được thực hiện đối với mảng ban đầu Thực hiện thay đổi trong VIEWVí dụTạo chế độ xem, thay đổi chế độ xem và hiển thị cả hai mảng nhập numpy dưới dạng np arr = np. mảng([1, 2, 3, 4, 5]) in(mảng) Mảng ban đầu NÊN bị ảnh hưởng bởi những thay đổi được thực hiện đối với dạng xem Kiểm tra xem Array có sở hữu dữ liệu của nó khôngNhư đã đề cập ở trên, bản sao sở hữu dữ liệu và chế độ xem không sở hữu dữ liệu, nhưng làm cách nào để kiểm tra điều này? Bạn có thể sử dụng toán tử trải rộng (". ") để sao chép một mảng trong JavaScript. Toán tử trải rộng (". ") có sẵn trong JavaScript ES6 trở lên và có thể được sử dụng để sao chép một mảng bằng cách "mở rộng" các phần tử của nó Mảng sao chép JavaScript với ví dụ về toán tử trải rộng
Làm cách nào để sao chép mảng JavaScript bằng phương thức slice()?mảng. phương thức slice() trong JavaScript được sử dụng để lấy một phần của mảng từ chỉ mục bắt đầu đến chỉ mục kết thúc. Phương thức slice() không sửa đổi mảng ban đầu. Nếu mảng ban đầu chứa các đối tượng tham chiếu đến các đối tượng khác, thì chỉ các tham chiếu của chúng sẽ được sao chép sang mảng mới (sao chép nông) Mảng sao chép JavaScript với phương thức slice() Ví dụ
Làm cách nào để sao chép mảng JavaScript bằng phương thức concat()?mảng. phương thức concat() trong JavaScript được sử dụng để nối hai hoặc nhiều mảng thành một. Bạn cũng có thể sử dụng phương thức concat() để sao chép một mảng. Phương thức concat() trả về một mảng mới mà không thay đổi mảng ban đầu JavaScript Clone Array với phương thức concat() Ví dụ
Làm cách nào để sao chép mảng JavaScript bằng phương thức from()?mảng. Phương thức from() trong JavaScript tạo một mảng mới từ mảng ban đầu. Phương pháp này đã được giới thiệu trong ES6 và chỉ hoạt động trong các trình duyệt hiện đại, nhưng bạn có thể sử dụng thư viện polyfill để có chức năng hiện đại trong các trình duyệt cũ hơn JavaScript Clone Array với phương thức from() Ví dụ
Xem thêm
Javascript Copy Array Các ví dụ và bài viết liên quan đến APILàm cách nào để gửi yêu cầu POST bằng JavaScript? Làm cách nào để sao chép một mảng trong PHP?Hàm getArrayCopy() của lớp ArrayObject trong PHP được sử dụng để tạo một bản sao của ArrayObject này . Hàm này trả về bản sao của mảng có trong ArrayObject này.
Làm cách nào để sao chép một mảng vào một mảng khác trong PHP?Cách sao chép mảng Deep Copy trong PHP . Xác định mảng ban đầu của bạn trong PHP dưới dạng biến Tạo một hàm PHP tùy chỉnh có tên là cloneArray với một tham số duy nhất cho mảng Bên trong hàm cloneArray khởi tạo một mảng trống mới Tạo một vòng lặp foreach bên trong hàm tùy chỉnh để lặp lại mảng đã truyền Các mảng PHP có được chuyển qua tham chiếu không?Đối với câu hỏi đầu tiên của bạn, mảng được truyền theo tham chiếu TRỪ KHI nó được sửa đổi trong phương thức/hàm bạn đang gọi . Nếu bạn cố gắng sửa đổi mảng trong phương thức/hàm, một bản sao của nó sẽ được tạo trước và sau đó chỉ bản sao được sửa đổi.
Làm cách nào để chuyển mảng trong PHP?Chuyển mảng PHP sang JavaScript rất dễ dàng bằng cách sử dụng Ký hiệu đối tượng JavaScript (JSON) . Phương pháp 1. Sử dụng hàm json_encode(). Hàm json_encode() được sử dụng để trả về biểu diễn JSON của một giá trị hoặc mảng. Hàm có thể lấy cả mảng một chiều và nhiều chiều. |