PHPで次のコードを理解しようとしています。概要は次のとおりです。
2つの配列があり、$ k =>$vの形式のキー値のペアで構成されています。
これらの2つの配列は、array_merge関数を使用してマージされ、3番目の配列を形成します。
これで、この配列が関数に渡されます。引数は1つだけで、配列名が渡されます。
コードは次のとおりです(このコードは単なる概念であり、実際のコードではないことに注意してください)。
<?php
function test(&$myArray, 0)
{
reset($myArray);
foreach ($myArray as $k => $v)
{
....
}
}
$arr3 = array_merge((array) $arr1, (array) $arr2);
test($arr3)
}
質問:
- 関数は2つの引数を期待するように定義されていますが、渡す引数は1つだけです。関数プロトタイプで初期化された2番目の引数が常に0であるためですか?それで、同じ数の引数を渡す必要はありませんか?
- ここで配列名が渡されます。私の推測では、配列の最初の要素(メモリ内の配列のベースアドレス)へのポインタが関数に渡されます。
この場合、プロトタイプを見ると、配列名の前にアンパサンドが付いています。つまり、これは、配列への参照、アドレス?
配列でリセット関数を呼び出す必要があるのはなぜですか。この配列を形成するために使用されたarray_merge関数が、テスト関数の前に呼び出されたためですか?したがって、$arr1と$arr2をマージした結果、配列内のポインターが最初の要素の前に移動しましたか?
関数testに値は返されません。では、メモリ自体の元の配列の値を変更するので、配列を返す必要はありませんか?
ありがとう。