多次元配列があり、一部の要素はオブジェクトです。1 つはすべての文字列値とオブジェクト プロパティが esc() 関数を介して渡されたもので、もう 1 つは変更されていない元の配列です。
次のコードがあるとします。
$raw = $data;
echo $raw['obj']->description; // Prints '< >Test Desc'
array_walk_recursive($data, function (&$item, $key){
if(is_string($item)) {
$item = esc($item);
} elseif(is_object($item)) {
foreach ($item as $property => $value) {
if(is_string($value)) {
$item->$property = esc($value);
}
}
}
});
echo $data['obj']->description; // Prints '< >Test Desc' - Correct
echo $raw['obj']->description; // Prints '< >Test Desc' - Incorrect
$raw は完全に変更されておらず、$data は esc() によって処理されているはずです。これは、オブジェクト プロパティを除いて当てはまります。何らかの理由で $raw のオブジェクトも変更され、2 つのecho
行が異なる値を出力するようになっています。これはなぜですか?