如何将var_export格式化为 php5.4 数组语法

2022-08-30 14:45:41

关于var输出的有效php语法的主题有很多问题和答案,我正在寻找的是一种快速干净的方式来获得使用有效php5.4数组语法的输出。var_export

鉴于

$arr = [
    'key' => 'value',
    'mushroom' => [
        'badger' => 1
    ]
];


var_export($arr);

输出

array (
  'key' => 'value',
  'mushroom' => 
  array (
    'badger' => 1,
  ),
)

有没有快速简便的方法来让它使用方括号语法输出定义的数组?

[
    'key' => 'value',
    'mushroom' => [
        'badger' => 1
    ]
]

普遍的共识是使用正则表达式解析吗?如果是这样,有没有人遇到过一个体面的正则表达式?我将使用的数组的值级别内容将全部为 和 ,没有对象或类。scalararray


答案 1

我有类似的东西躺在周围。

function var_export54($var, $indent="") {
    switch (gettype($var)) {
        case "string":
            return '"' . addcslashes($var, "\\\$\"\r\n\t\v\f") . '"';
        case "array":
            $indexed = array_keys($var) === range(0, count($var) - 1);
            $r = [];
            foreach ($var as $key => $value) {
                $r[] = "$indent    "
                     . ($indexed ? "" : var_export54($key) . " => ")
                     . var_export54($value, "$indent    ");
            }
            return "[\n" . implode(",\n", $r) . "\n" . $indent . "]";
        case "boolean":
            return $var ? "TRUE" : "FALSE";
        default:
            return var_export($var, TRUE);
    }
}

它不是太漂亮,但也许足以满足你的情况。

除指定类型之外的任何类型都由常规var_export处理。因此,对于单引号字符串,只需注释掉大小写即可。string


答案 2

对于任何寻求更现代解决方案的人,请使用Symfony var-exporter,它也可作为作曲家上的独立库,但包含在Symfony default中。

composer require symfony/var-exporter
use Symfony\Component\VarExporter\VarExporter;

// ...

echo VarExporter::export($arr)