1. ホーム
  2. php

[解決済み] PHPの配列を別の配列にコピーする関数はありますか?

2022-01-29 15:50:48

質問

PHPの配列を別の配列にコピーする関数はありますか?

PHP の配列をコピーしようとして、何度か痛い目に遭っています。オブジェクトの内部で定義された配列を、その外部のグローバルにコピーしたいのです。

どのように解決するのですか?

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には"references"と呼ばれる特別な機能があります。これは、C/C++ などの言語におけるポインタと多少似ていますが、まったく同じというわけではありません。配列に参照が含まれている場合、配列自体はコピーで渡されても、参照は元のターゲットに解決されます。もちろん、通常はそのような動作が望ましいのですが、触れておくに越したことはないと思いました。