Есть ли функция, чтобы сделать копию массива PHP в другой?

Невозможно, чего вы хотите достичь. Объяснение приведено в справочной документации Spring .

487
задан vfclists 21 July 2013 в 01:23
поделиться

4 ответа

В PHP массивы назначаются по копии, а объекты назначаются по ссылке. Это означает, что:

$a = array();
$b = $a;
$b['foo'] = 42;
var_dump($a);

Выдает:

array(0) {
}

Тогда как:

$a = new StdClass();
$b = $a;
$b->foo = 42;
var_dump($a);

Выдает:

object(stdClass)#1 (1) {
  ["foo"]=>
  int(42)
}

Вы можете запутаться в таких тонкостях, как ArrayObject , который представляет собой объект, который действует точно как массив. Однако, будучи объектом, он имеет ссылочную семантику.

Редактировать: @AndrewLarsson поднимает вопрос в комментариях ниже. В PHP есть специальная функция, которая называется «ссылки». Они чем-то похожи на указатели в таких языках, как C / C ++, но не совсем то же самое. Если ваш массив содержит ссылки, тогда, хотя сам массив передается копией, ссылки все равно будут преобразовываться в исходную цель. Это, конечно, обычно желаемое поведение, но я подумал, что об этом стоит упомянуть.

887
ответ дан 22 November 2019 в 22:38
поделиться
foreach($a as $key => $val) $b[$key] = $val ;

Сохраняет и ключ и значения. Выстройте точной копии 'b'

массива
-1
ответ дан 22 November 2019 в 22:38
поделиться

Когда вы делаете

$array_x = $array_y;

PHP копирует массив, я не уверен, как вы могли бы сгореть. В вашем случае

global $foo;
$foo = $obj->bar;

должен работать нормально.

Я думаю, что для того, чтобы сгореть, вам нужно было либо использовать ссылки, либо ожидать клонирования объектов внутри массивов.

28
ответ дан 22 November 2019 в 22:38
поделиться

PHP скопирует массив по умолчанию. Ссылки в PHP должны быть явными.

$a = array(1,2);
$b = $a; // $b will be a different array
$c = &$a; // $c will be a reference to $a
178
ответ дан 22 November 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: