最近、PHPでのプログラムを組む上で、配列の代入の動作がどうだったか少し心配になったので調べてみました。
配列の代入は、代入元の配列の内容そのものが全てコピーされます。他の言語では代入元のクローンを作成し、 代入先の配列に設定する感じです。
以下のソースは代入を行う簡単な例です。
<?php
//最初の配列宣言
$arr1 = array("AAAAA", "BBBB", "CCC");
//配列のコピー
$arr2 = $arr1;
//敢えてコピー先配列の2番目のデータ書き換え
$arr2[1] = intval(1);
//内容の表示
print_r($arr1);
print_r($arr2);
?>
結果は以下の表示になります。
Array
(
[0] => AAAAA
[1] => BBBB
[2] => CCC
)
Array
(
[0] => AAAAA
[1] => 1
[2] => CCC
)
コピー先の配列の内容が、コピー元の内容と異なっていることが分かります。
但し、代入の所で「&」を使用すると、内容がコピーされるのではなく、参照がコピーされます。
<?php
//最初の配列宣言
$arr1 = array("AAAAA", "BBBB", "CCC");
//配列の参照コピー
$arr2 = &$arr1;
//$arr2を介して,$arr1が変更
$arr2[1] = intval(1);
print_r($arr1);
print_r($arr2);
?>
この結果は以下の様に、2個の配列の内容が同じになります。
Array
(
[0] => AAAAA
[1] => 1
[2] => CCC
)
Array
(
[0] => AAAAA
[1] => 1
[2] => CCC
)
PR
コメント