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

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ượng

Sử 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ông

Nhâ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 __clone

Nế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ÉP

Ví 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])
x = mảng. copy()
arr[0] = 42

in(mảng)
in(x)

Tự mình thử »

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 XEM

Ví 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])
x = mảng. view()
arr[0] = 42

in(mảng)
in(x)

Tự mình thử »

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 VIEW

Ví 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])
x = mảng. lượt xem()
x[0] = 31

in(mảng)
in(x)

Tự mình thử »

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ông

Như đã đề 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

let array = ['JavaScript', 'Clone', 'Array', 'Example'];

console.log(newArray = [...array]);

// output: ['JavaScript', 'Clone', 'Array', 'Example']


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ụ

let array = ['JavaScript', 'Copy', 'Array', 'Example'];

console.log(array.slice());

// output: ['JavaScript', 'Copy', 'Array', 'Example']


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ụ

let array = ['JavaScript', 'Clone', 'Array', 'Example'];

let newArray = [].concat(array);

console.log(newArray);

// output: ['JavaScript', 'Clone', 'Array', 'Example']


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ụ

let array = ['JavaScript', 'Clone', 'Array', 'Example'];

let newArray = Array.from(array);

console.log(newArray);

// output: ['JavaScript', 'Clone', 'Array', 'Example']


Xem thêm

  • Làm cách nào để kiểm tra xem một mảng có chứa giá trị trong JavaScript không?
  • Làm cách nào để cắt một mảng trong JavaScript?
  • Làm cách nào để đảo ngược một mảng trong JavaScript?
  • Làm cách nào để lấy tổng của một mảng trong JavaScript?
  • Làm cách nào để nối một mảng thành một chuỗi trong JavaScript?

Javascript Copy Array Các ví dụ và bài viết liên quan đến API

Là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.