将数组打印为代码
Posted
技术标签:
【中文标题】将数组打印为代码【英文标题】:print an array as code 【发布时间】:2011-07-05 14:35:57 【问题描述】:我想将一个大的 yaml 文件转换为 php 数组源代码。我可以读入 yaml 代码并取回一个 PHP 数组,但是使用 var_dump($array) 我会得到伪代码作为输出。我想将数组打印为有效的 php 代码,这样我就可以将它复制粘贴到我的项目中并放弃 yaml。
【问题讨论】:
出于好奇,您为什么要放弃 yaml?这是您和其他人可以手动编辑的绝妙格式。 :-) 如果您将它与“包含”一个 php 数组进行比较,那么在每个请求上解析一个 YAML 文件相对较慢。在我目前的项目中,速度更重要。 【参考方案1】:您正在寻找var_export
。
【讨论】:
即:$string_representation = var_export($complex_array, TRUE);
有没有办法用 [] 而不是 array() 来 var_export ?
我不知道。
耶!这个问题我想了很久。 @Oliboy50 只需在 array (
-> [
和 , )
-> , ]
上查找+替换即可
@RobbertvandenBogerd 如果在数组中的字符串中包含单词“array(”,或者只是“)”,您会得到令人惊讶的结果……【参考方案2】:
您可以使用var_export、serialize(在保留端使用反序列化),甚至可以使用json_encode(并在接收端使用json_decode)。最后一个的优点是产生的输出可以被任何可以处理 JSON 的东西处理。
【讨论】:
【参考方案3】:不知道为什么,但我在任何地方都找不到令人满意的代码。
很快就写好了。如果您发现任何错误,请告诉我。
function printCode($array, $path=false, $top=true)
$data = "";
$delimiter = "~~|~~";
$p = null;
if(is_array($array))
foreach($array as $key => $a)
if(!is_array($a) || empty($a))
if(is_array($a))
$data .= $path."['$key'] = array();".$delimiter;
else
$data .= $path."['$key'] = \"".htmlentities(addslashes($a))."\";".$delimiter;
else
$data .= printCode($a, $path."['$key']", false);
if($top)
$return = "";
foreach(explode($delimiter, $data) as $value)
if(!empty($value))
$return .= '$array'.$value."<br>";
;
return $return;
return $data;
//REQUEST
$x = array('key'=>'value', 'key2'=>array('key3'=>'value2', 'key4'=>'value3', 'key5'=>array()));
echo printCode($x);
//OUTPUT
$array['key'] = 'value';
$array['key2']['key3'] = 'value2';
$array['key2']['key4'] = 'value3';
$array['key2']['key5'] = array();
希望这对某人有所帮助。
【讨论】:
【参考方案4】:另一种将数组显示为带有缩进的代码的方法。
仅使用包含字符串、整数和数组的数组进行测试。
function bo_print_nice_array($array)
echo '$array=';
bo_print_nice_array_content($array, 1);
echo ';';
function bo_print_nice_array_content($array, $deep=1)
$indent = '';
$indent_close = '';
echo "[";
for($i=0; $i<$deep; $i++)
$indent.=' ';
for($i=1; $i<$deep; $i++)
$indent_close.=' ';
foreach($array as $key=>$value)
echo "<br>".$indent;
echo '"'.$key.'" => ';
if(is_string($value))
echo '"'.$value.'"';
elseif(is_array($value))
bo_print_nice_array_content($value, ($deep+1));
else
echo $value;
echo ',';
echo '<br>'.$indent_close.']';
【讨论】:
以上是关于将数组打印为代码的主要内容,如果未能解决你的问题,请参考以下文章