3

私は次のことができるようにしたい:

$normal_array       = array();
$array_of_arrayrefs = array( &$normal_array );

// Here I want to access the $normal_array reference **as a reference**,
// but that doesn't work obviously. How to do it?
end( $array_of_arrayrefs )["one"] = 1; // choking on this one

print $normal_array["one"]; // should output 1

よろしく

/R

4

5 に答える 5

4

end()最後の値の参照を返すのではなく、最後の値自体を返します。回避策は次のとおりです。

$normal_array       = array();
$array_of_arrayrefs = array( &$normal_array );

$refArray = &end_byref( $array_of_arrayrefs );
$refArray["one"] = 1;

print $normal_array["one"]; // should output 1

function &end_byref( &$array ) {
    $lastKey = end(array_keys($array));
    end($array);
    return $array[$lastKey];
}
于 2008-10-10T15:44:00.980 に答える
1

そもそも参照渡しをするべきではありません。状態がどこで変更されたかを確認するのが難しくなるため、一般的にそうするのは悪い習慣と考えられています。

参照の方が速いというのはよくある誤解です。これは事実ではありません - 実際、それらは少し遅くなりますが、実際には問題にならない程度のわずかなものです。PHP にはコピー オン ライトと呼ばれるシステムがあります。これは、変数に書き込む前に変数が実際にコピーされないことを意味します。

本当に参照が必要な唯一の場所は PHP4 であり、それ以外の場合はオブジェクトが複製されます。これは PHP5 では必要ありません。

于 2008-10-11T11:30:35.500 に答える
1

ここにいくつかのアプローチがありますが、どちらも特に満足できるものではありません。もっと良い方法があると確信しています..

<?php
$normal_array       = array();
$array_of_arrayrefs = array( "blah", &$normal_array );

foreach ($array_of_arrayrefs as &$v);
$v["one"] = 1;

echo $normal_array["one"];  //prints 1
?>


<?php
$normal_array       = array();
$array_of_arrayrefs = array( "blah", &$normal_array );

$lastIndex = @end(array_keys($array_of_arrayrefs)); //raises E_STRICT because end() expects referable.
$array_of_arrayrefs[$lastIndex]["one"] = 1;

echo $normal_array["one"];  //prints 1
?>
于 2008-10-10T15:54:49.320 に答える
0

関数 end() は値を返すだけではありません。また、配列の内部ポインタも移動します。次に、key() を使用してインデックスを取得できます。その後、割り当てに通常の配列アクセスを使用できます。

$normal_array       = array();
$array_of_arrayrefs = array( &$normal_array );

end($array_of_arrayrefs);
$array_of_arrayrefs[ key($array_of_arrayrefs) ]["one"] = 1;

print $normal_array["one"];
于 2009-01-10T00:46:55.233 に答える
-1

この線:

end( $array_of_arrayrefs )["1"] = 1; // これを窒息させる

解析エラーをスローします:

解析エラー: 構文エラー、65 行目の /file.php の予期しない '['

error_reportingおよびdisplay_errorアクティブ化されていることを確認してください。

あなたが何をしたいのかわかりませんが、これはうまくいきます:

$normal_array       = array();
$array_of_arrayrefs = array( &$normal_array );
// Here I want to access the $normal_array reference **as a reference**,
// but that doesn't work obviously. How to do it?
$array_of_arrayrefs[0]["one"] = 1;
//end($array_of_arrayrefs )["one"] = 1; // choking on this one
print $normal_array["one"]; // should output 1
于 2008-10-10T15:42:13.840 に答える