1

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)

}

質問:

  1. 関数は2つの引数を期待するように定義されていますが、渡す引数は1つだけです。関数プロトタイプで初期化された2番目の引数が常に0であるためですか?それで、同じ数の引数を渡す必要はありませんか?
  2. ここで配列名が渡されます。私の推測では、配列の最初の要素(メモリ内の配列のベースアドレス)へのポインタが関数に渡されます。

この場合、プロトタイプを見ると、配列名の前にアンパサンドが付いています。つまり、これは、配列への参照、アドレス?

  1. 配列でリセット関数を呼び出す必要があるのはなぜですか。この配列を形成するために使用されたarray_merge関数が、テスト関数の前に呼び出されたためですか?したがって、$arr1と$arr2をマージした結果、配列内のポインターが最初の要素の前に移動しましたか?

  2. 関数testに値は返されません。では、メモリ自体の元の配列の値を変更するので、配列を返す必要はありませんか?

ありがとう。

4

1 に答える 1

1
<?php
function test($myArray,$a =0) //passing by value
{
    reset($myArray);
    return $myArray;         
}

$arr3 = test($arr3); //call n store it back it in $arr3

function test(&$myArray,$a =0) //passing by reference
    {
        reset($myArray);

    }
test($arr3);  //just call;

?>
于 2012-09-20T07:53:53.437 に答える