我不认为您可以在不重新编译 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);