将数组打印为代码

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.='&nbsp;&nbsp;&nbsp;&nbsp;';
    
    for($i=1; $i<$deep; $i++)
        $indent_close.='&nbsp;&nbsp;&nbsp;&nbsp;';
    
    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.']';


【讨论】:

以上是关于将数组打印为代码的主要内容,如果未能解决你的问题,请参考以下文章

如何将二维字符串数组打印为字符串

Java基础知识强化105:打印数组的方法总结

从尾到头打印链表

PHP - 打印 GeoIP 数组

怎么将python中的数组全部打印出来array

将 python 代码移植到 C++ /(在 C++ 中打印出数组)