値を関数に渡すときに配列が変更されるという問題が発生しています。
コードを調べたところ、関数内で配列がループされ、参照によって要素が取得されました。
ループの後、配列項目が参照済みとしてマークされているのを見て驚いた。これが何を意味するのかわかりませんが、私の問題の原因であるに違いありません。
ポイントを見るために例を挙げましょう。
<?php
error_reporting(E_ALL);
ini_set('display_errors' , 1);
$a = array( array(0) );
echo '--1--';var_dump($a);
dummy($a);
echo '--4--';var_dump($a);
function dummy($arg) {
foreach($arg as &$item) {
$item[0] = 3;
}
dummy2($arg);
echo '--3--';var_dump($arg);
}
function dummy2($arg) {
foreach($arg as &$item) {
$item[1]=9;
}
echo '--2--';var_dump($arg);
}
?>
このコードの後、ポイント3では、$ argには要素が1つしかないが、2つあるため、dummy2関数によって変更されていると思います。
出力は次のとおりです。
--1--array(1) { [0]=> array(1) { [0]=> int(0) } }
--2--array(1) { [0]=> &array(2) { [0]=> int(3) [1]=> int(9) } }
--3--array(1) { [0]=> &array(2) { [0]=> int(3) [1]=> int(9) } }
--4--array(1) { [0]=> array(1) { [0]=> int(0) } }
参照によってループされた後、配列が&arrayとしてマークされるのはなぜですか?どうすればこれを回避できますか?