Hướng dẫn php deep copy array - mảng sao chép sâu php

Bạn có thể sử dụng thực tế là các chức năng kết quả khi quay lại, vì ví dụ ở đây $array_by_myclone vẫn sẽ có tham chiếu đến $original [$array_by_myclone[0][0] == 'foo'] trong khi

lepidosteus@server:~$ php -v
PHP 5.5.1-1~dotdeb.1 [cli] [built: Aug  3 2013 22:19:30] 
Copyright [c] 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright [c] 1998-2013 Zend Technologies
    with Zend OPcache v7.0.2-dev, Copyright [c] 1999-2013, by Zend Technologies
lepidosteus@server:~$ php reference.php 1
myclone:   0.000010 seconds
serialize: 0.000012 seconds
lepidosteus@server:~$ php reference.php 1000000
myclone:   0.398540 seconds
serialize: 0.706631 seconds
0 sẽ có giá trị nhân bản [
lepidosteus@server:~$ php -v
PHP 5.5.1-1~dotdeb.1 [cli] [built: Aug  3 2013 22:19:30] 
Copyright [c] 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright [c] 1998-2013 Zend Technologies
    with Zend OPcache v7.0.2-dev, Copyright [c] 1999-2013, by Zend Technologies
lepidosteus@server:~$ php reference.php 1
myclone:   0.000010 seconds
serialize: 0.000012 seconds
lepidosteus@server:~$ php reference.php 1000000
myclone:   0.398540 seconds
serialize: 0.706631 seconds
1]

$original = 'foo';
$array_of_reference = array[&$original];

function myclone[$value]
{
  return $value;
}

$array_by_myclone = array[];
$array_by_myclone[] = array_map['myclone', $array_of_reference];

$array_by_assignment = array[];
$array_by_assignment[] = $array_of_reference;

$original = 'bar';

var_dump[$array_by_myclone[0][0]]; // foo, values were cloned                                                                                                                                   
var_dump[$array_by_assignment[0][0]]; // bar, still a reference                     

EDIT: Tôi muốn kiểm tra xem nhận xét cho biết

lepidosteus@server:~$ php -v
PHP 5.5.1-1~dotdeb.1 [cli] [built: Aug  3 2013 22:19:30] 
Copyright [c] 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright [c] 1998-2013 Zend Technologies
    with Zend OPcache v7.0.2-dev, Copyright [c] 1999-2013, by Zend Technologies
lepidosteus@server:~$ php reference.php 1
myclone:   0.000010 seconds
serialize: 0.000012 seconds
lepidosteus@server:~$ php reference.php 1000000
myclone:   0.398540 seconds
serialize: 0.706631 seconds
2 có nhanh hơn không vì vậy tôi đã thực hiện bài kiểm tra bằng Php 5.5, và hóa ra điều này là sai: Sử dụng phương pháp tuần tự hóa chậm hơn ngay cả với một bộ dữ liệu nhỏ và bạn càng có nhiều dữ liệu nó càng chậm.

lepidosteus@server:~$ php -v
PHP 5.5.1-1~dotdeb.1 [cli] [built: Aug  3 2013 22:19:30] 
Copyright [c] 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright [c] 1998-2013 Zend Technologies
    with Zend OPcache v7.0.2-dev, Copyright [c] 1999-2013, by Zend Technologies
lepidosteus@server:~$ php reference.php 1
myclone:   0.000010 seconds
serialize: 0.000012 seconds
lepidosteus@server:~$ php reference.php 1000000
myclone:   0.398540 seconds
serialize: 0.706631 seconds

Mã đã được sử dụng:

Bài Viết Liên Quan

Chủ Đề