注: 何が起こっているかについて私が間違っていたようで、 を使用しても問題はありません$a = array();
。これは、配列へのすべての割り当てがコピーによるものであるためです。(問題を引き起こしている参照によるアクセスがいくつかあると思っていましたが、それは単なるタイプミスでした。以下の回答に詳細を追加しました。
次のようなPHPがあります。
$myArray = array();
function useArray() {
global $myArray;
// ... do something with myArray ...
}
function clearArray() {
global $myArray;
// ... Somehow clear the global array ...
}
設計の観点からこれが悪いことはわかっていますが、変更できないサードパーティのコードを回避する必要があります...
私の質問は、clearArray
機能させるために関数に何を入れることができますか?
グローバルバージョンではなくローカルバージョンのみを変更するため、orを使用するという通常のアドバイスは機能しません。配列内のキーをループして、それぞれを順番に設定解除できると思います-次のように:$myArray=array();
unset($myArray);
function clearArray() {
global $myArray;
foreach($key in array_keys($myArray) ) {
unset( $myArray[$key] );
}
}
しかし、それはハッキーで不明確なようです。より良い解決策はありますか?