des*_*key 23 php arrays php-5.4
围绕var输出的有效php语法主题有很多问题和答案,我正在寻找的是一种快速而简洁的方法来获得var_export
使用有效的php5.4数组语法的输出.
特定
$arr = [
'key' => 'value',
'mushroom' => [
'badger' => 1
]
];
var_export($arr);
Run Code Online (Sandbox Code Playgroud)
输出
array (
'key' => 'value',
'mushroom' =>
array (
'badger' => 1,
),
)
Run Code Online (Sandbox Code Playgroud)
是否有任何快速简便的方法让它按照定义输出数组,使用方括号语法?
[
'key' => 'value',
'mushroom' => [
'badger' => 1
]
]
Run Code Online (Sandbox Code Playgroud)
使用正则表达式解析是否普遍达成共识?如果是这样,有没有人遇到过正确的正则表达式?我将使用的数组的值级别内容将是,scalar
并且array
没有对象或类.
mar*_*rio 27
我有类似的东西.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这不是太漂亮,但可能足以满足您的需求.
除了指定的类型之外的任何类型都由常规处理var_export
.因此,对于单引号字符串,只需注释掉string
案例.
Mar*_* AO 13
我意识到这个问题很古老; 但是搜索引导我到这里来.我不关心完整的迭代或使用json_decode
,所以这里是一个preg_replace
基于var_export
twister 的twister完成工作.
function var_export_short($data, $return=true)
{
$dump = var_export($data, true);
$dump = preg_replace('#(?:\A|\n)([ ]*)array \(#i', '[', $dump); // Starts
$dump = preg_replace('#\n([ ]*)\),#', "\n$1],", $dump); // Ends
$dump = preg_replace('#=> \[\n\s+\],\n#', "=> [],\n", $dump); // Empties
if (gettype($data) == 'object') { // Deal with object states
$dump = str_replace('__set_state(array(', '__set_state([', $dump);
$dump = preg_replace('#\)\)$#', "])", $dump);
} else {
$dump = preg_replace('#\)$#', "]", $dump);
}
if ($return===true) {
return $dump;
} else {
echo $dump;
}
}
Run Code Online (Sandbox Code Playgroud)
我在几个数组和对象上测试过它.没有任何措施,但似乎工作正常.我通过压缩额外的换行符和空数组使输出"紧密".如果您使用此方法遇到任何无意的数据损坏,请告诉我.我还没有针对上述解决方案进行基准测试,但我怀疑它会更快.喜欢阅读你的阵列!
Rei*_*sma 12
对于寻找更现代解决方案的任何人,请使用 Symfony var-exporter,它也可作为 composer 上的独立库使用,但包含在 Symfony 默认中。
composer require symfony/var-exporter
Run Code Online (Sandbox Code Playgroud)
use Symfony\Component\VarExporter\VarExporter;
// ...
echo VarExporter::export($arr)
Run Code Online (Sandbox Code Playgroud)
B.A*_*lin 10
使用https://github.com/zendframework/zend-code:
<?php
use Zend\Code\Generator\ValueGenerator;
$generator = new ValueGenerator($myArray, ValueGenerator::TYPE_ARRAY_SHORT);
$generator->setIndentation(' '); // 2 spaces
echo $generator->generate();
Run Code Online (Sandbox Code Playgroud)