Nếu bạn cần sao chép sâu một đối tượng [có các đối tượng bên trong nó] thì bạn sẽ phải viết một phương thức __clone ma thuật cho đối tượng mà bạn sắp sao chép. Ít nhất thì nó rất lộn xộn - vì vậy hãy tránh để các đối tượng có bộ sưu tập đối tượng trừ khi bạn không cần sao chép chúng
Nếu bạn muốn sao chép tất cả các giá trị của một mảng vào một danh sách biến, bạn có thể sử dụng cấu trúc list[] ở bên trái của toán tử gán. list[] sẽ chỉ nhận các giá trị có khóa số nguyên bắt đầu từ 0. Đây là một tập lệnh PHP về cách sử dụng cấu trúc list[]
"PHP", 1=>"Basic", "One"=>"Perl", 0=>"Pascal", 2=>"FORTRAN", "Two"=>"Java"]; list[$first, $second, $third] = $array; print["Test 3: The third language = $third\n"]; ?>
Kịch bản này sẽ in
Test 1: The third site = Netscape Test 2: Year = 2006 Test 3: The third language = FORTRAN
Bài kiểm tra 2 sử dụng mảng được trả về bởi hàm split[]. Thử nghiệm 3 cho thấy list[] sẽ bỏ qua mọi giá trị có khóa chuỗi
Sao chép mảng PHP là hành động sao chép một mảng PHP [bản sao sâu và bản sao nông]. Hành động này có thể được thực hiện theo nhiều cách, chẳng hạn như toán tử =, con trỏ, lớp ArrayObject và hàm do người dùng định nghĩa để sao chép một mảng với mảng con trong PHP. Có một số hàm PHP tích hợp để sao chép mảng trong PHP
Bản sao sâu PHP và bản sao nông của một mảng
Bản sao sâu là bản sao mảng có tham chiếu duy nhất và không gian dành riêng trong bộ nhớ
Một bản sao nông là một bản sao mảng với không gian bộ nhớ và tham chiếu được chia sẻ
1. Cách sao chép một mảng trong PHP bằng toán tử =
Trong PHP, tất cả các biến ngoại trừ các đối tượng được gán theo cơ chế sao chép khi ghi, trong khi mọi thứ được gán theo tham chiếu. Điều này có nghĩa là đối với các mảng có giá trị vô hướng chỉ đơn giản bằng toán hạng =. Phương pháp này là một bản sao sâu
$cars=array['fer'=>'Ferrari','ben'=>'Benz','bmw'=>'BMW'];
$cars2=$cars;
var_dump[$cars2];
đầu ra
array [size=3]
'fer' => string 'Ferrari' [length=7]
'ben' => string 'Benz' [length=4]
'bmw' => string 'BMW' [length=3]
Bạn chỉ cần gán chúng cho biến khác để lấy bản sao của mảng đó
2. Bằng con trỏ
Trong phần trước, bạn có 2 mảng khác nhau có cùng khóa và giá trị. Nhưng nếu bạn sử dụng con trỏ [&] thì bạn sẽ có một mảng có 2 tên. Phương pháp này là một bản sao nông
Hãy xem cách tạo một bản sao nông của một mảng trong PHP
$cars=array['fer'=>'Ferrari','ben'=>'Benz','bmw'=>'BMW'];
$cars2=&$cars;
var_dump[$cars2];
đầu ra
array [size=3]
'fer' => string 'Ferrari' [length=7]
'ben' => string 'Benz' [length=4]
'bmw' => string 'BMW' [length=3]
Vì bản sao là một bản sao nông, nên việc thay đổi nó sẽ ảnh hưởng đến bản gốc vì cả hai đều trỏ đến cùng một mảng nằm trong cùng một không gian bộ nhớ. Nếu bạn thay đổi một giá trị trong mảng, giá trị mảng khác sẽ bị thay đổi
$cars=array['fer'=>'Ferrari','ben'=>'Benz','bmw'=>'BMW'];
$cars2=&$cars;
$cars['vol']='Volvo';
var_dump[$cars2];
đầu ra
array [size=4]
'fer' => string 'Ferrari' [length=7]
'ben' => string 'Benz' [length=4]
'bmw' => string 'BMW' [length=3]
'vol' => string 'Volvo' [length=5]
Tất cả những gì bạn cần là gán tham chiếu cho một biến mới. Hãy nghĩ về một tham chiếu như một con trỏ tới vị trí bộ nhớ chính xác của mảng ban đầu
3. Theo lớp ArrayObject
Một cách khác để sao chép mảng là sử dụng lớp ArrayObject. 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
________số 8_______đầu ra
array [size=3]
'fer' => string 'Ferrari' [length=7]
'ben' => string 'Benz' [length=4]
'bmw' => string 'BMW' [length=3]
4. Với serialize và unserialize
$cars = array['fer' => 'Ferrari', 'ben' => 'Benz', 'bmw' => 'BMW'];
$cars2 = unserialize[serialize[$cars]];
var_dump[$cars2];
đầu ra
array [size=3]
'fer' => string 'Ferrari' [length=7]
'ben' => string 'Benz' [length=4]
'bmw' => string 'BMW' [length=3]
5. Sao chép mảng bằng hàm array_replace[]
array [size=3]
'fer' => string 'Ferrari' [length=7]
'ben' => string 'Benz' [length=4]
'bmw' => string 'BMW' [length=3]
0đầu ra
array [size=3]
'fer' => string 'Ferrari' [length=7]
'ben' => string 'Benz' [length=4]
'bmw' => string 'BMW' [length=3]
6. Sao chép bằng hàm array_merge[]
Hàm này hoạt động giống như hàm array_replace[]
array [size=3]
'fer' => string 'Ferrari' [length=7]
'ben' => string 'Benz' [length=4]
'bmw' => string 'BMW' [length=3]
2đầu ra
array [size=3]
'fer' => string 'Ferrari' [length=7]
'ben' => string 'Benz' [length=4]
'bmw' => string 'BMW' [length=3]
7. Cách copy mảng nhiều chiều trong PHP bằng hàm do người dùng định nghĩa [mảng và mảng con]
Mảng đa chiều đưa độ phức tạp lên một tầm cao mới. Đó là một thách thức ở chỗ nó có thể bao gồm nhiều cấp độ của các mảng con và các loại dữ liệu khác nhau. Đây là chức năng mạnh mẽ nhất để sao chép sâu một mảng và mảng con trong PHP