phpを再コンパイルせずにこの機能を無効にすることはできないと思います。
multi dim配列をウォークして、元の変数名を再構築することについて警告したいと思います。phpは特定の文字の名前を変更するため、名前を完全に再構築することはできません。たとえば、phpは$ _POST / $ _ GET / etc ...のトップレベルの配列キーで特定の文字を許可しないため、charをアンダースコアに置き換えます。a.b
a b
a[b
これにより、すべてがとして表示されるため、区別することができなくなりa_b
ます。さらに、この動作を引き起こす要求変数の配列構文の解析に関連する長年のバグがあります。これが私が数年前に提出したバグレポートですhttps://bugs.php.net/bug.php?id=48597これは修正される可能性が低いです。
さらに、magic_quotes_gpc
その設定が有効になっている場合は、配列キーにタロンを沈めました。
ただし、前述のエッジケースが失敗しても問題がない場合は、次のように配列を再構築できます。
$ritit = new RecursiveIteratorIterator(new RecursiveArrayIterator($_POST));
$result = array();
foreach ($ritit as $k => $leafValue) {
if ($ritit->getDepth() > 0) {
$path = array($ritit->getSubIterator(0)->key());
foreach (range(1, $ritit->getDepth()) as $depth) {
$path[] = sprintf('[%s]', $ritit->getSubIterator($depth)->key());
}
$result[ join('', $path) ] = $leafValue;
} else {
$result[$k] = $leafValue;
}
}
print_r($result);