PHP 配列を別の配列にコピーする関数はありますか?
PHP 配列をコピーしようとして、何度か失敗したことがあります。オブジェクト内で定義された配列を、その外側のグローバルにコピーしたいのです。
ベストアンサー1
PHP では、オブジェクト以外のすべての変数はコピーオンライトと呼ばれるメカニズムによって割り当てられますが、オブジェクトは参照によって割り当てられます。つまり、スカラー値を持つ配列の場合は、単に$b = $a
コピーが作成されるだけです。
$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++ などの言語のポインターに似ていますが、まったく同じではありません。配列に参照が含まれている場合、配列自体はコピーによって渡されますが、参照は元のターゲットに解決されます。もちろん、これは通常望ましい動作ですが、言及する価値があると思いました。