1

最近、PHP 配列のコピーを作成しようとしましたが、値を含む配列のコピーではなく、コピーに値への参照を含めたいと考えていました。
これに対する私の主な動機は、関数をおよび関数call_user_func_arrayと組み合わせて使用​​して、準備済みステートメントを処理するためのラッパー関数を作成することでした。mysqli_stmt_bind_parammysqli_stmt_bind_result

これを行う方法を理解しようとしているときに、次のコードに出くわしました。

$arr = array(1, 2, 3, 4); // The array to make a copy of with references
$ref_arr = array();       // The new array that will contain the references

foreach ($arr as $key => &$val) {
  $ref_arr[$key] = &$val;
}

上記のコードは、配列内の要素が値自体ではなく値への参照であることを除いて、最初の配列と同じ2番目の配列を作成することで、実際に私が望むものを提供しますが、それがどのように機能するかわかりません。

アンパサンド ( ) が PHP で何をするかは理解していますが、 foreach ループ内の の&両方のインスタンスを として参照する必要がある理由がわかりません。$val&$val

上記の foreach ループで正確に何が起こっているかを誰かが説明できれば、非常に感謝しています。
どうもありがとう。

4

2 に答える 2

2

mysqli_stmt_bind_param()参照によって値を渡す必要があります。したがって、その関数が行うことは、元の配列の値を参照する配列を作成することだけです。それはmysqli_stmt_bind_param幸せになります。ちょっとばかげていますが、 で呼び出す必要がcall_user_func_array()ありmysqli_stmt_bind_param()ます。

参照: のマニュアルを参照してくださいmysqli_stmt_bind_param()

mysqli_stmt_bind_param() を call_user_func_array() と組み合わせて使用​​する場合は注意が必要です。mysqli_stmt_bind_param() はパラメーターを参照渡しする必要があるのに対し、call_user_func_array() は参照または値を表すことができる変数のリストをパラメーターとして受け入れることができることに注意してください。

于 2013-11-09T02:20:40.317 に答える