私は(デバッグ目的のために)、配列内の参照を検出するための簡単な方法を持っている
まず私はarray_values
で、配列のクローンを作成し、その後、私はクローンを変更し、元の変化を見て。それが変更された場合、その要素は参照です。
ショート例:
<?php
$a = [
'a' => 'b',
2 => 3,
];
$b = ['wow'];
$a['ref'] = &$b;
function getrefs($array) {
$marker = uniqid();
$copy = array_values($array);
$i = 0;
$return = [];
foreach ($array as $key => &$val) {
$stash = $val;
$copy[$i] = $marker;
if ($val === $marker) {
$val = $stash;
$return[] = $key;
}
$i++;
}
return $return;
}
var_dump($a);
var_dump(getrefs($a));
問題は、私は$GLOBALS
でこれを使用しようとすると、それは働いていない、と私はその理由を把握することはできませんということです。 $GLOBALS
のすべては、すべての権利によって参照する必要があります。
$GLOBALS
array_values
が参照を正しくコピーしない唯一の配列だと奇妙なのですか?
を持つことになります。 '$ GLOBALS ['GLOBALS']'を試しましたか? – AbraCadaver
いいえ、私はちょうどやったと同じ結果を持っています –