如何从用 print_r 打印的数组的输出创建一个数组?

新手上路,请多包涵

我有一个数组:

 $a = array('foo' => 'fooMe');

我这样做:

 print_r($a);

打印:

 Array ( [foo] => printme )

有没有功能,所以在做的时候:

 needed_function('    Array ( [foo] => printme )');

我会得到数组 array('foo' => 'fooMe'); 回来?

原文由 John Kar. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 462
2 个回答

我实际上写了一个将“字符串数组”解析为实际数组的函数。显然,它有点 hacky 之类的,但它适用于我的测试用例。这是一个功能原型的链接,网址为 http://codepad.org/idlXdij3

对于那些不想点击链接的人,我也会内联发布代码:

 <?php
     /**
      * @author ninetwozero
      */
?>
<?php
    //The array we begin with
    $start_array = array('foo' => 'bar', 'bar' => 'foo', 'foobar' => 'barfoo');

    //Convert the array to a string
    $array_string = print_r($start_array, true);

    //Get the new array
    $end_array = text_to_array($array_string);

    //Output the array!
    print_r($end_array);

    function text_to_array($str) {

        //Initialize arrays
        $keys = array();
        $values = array();
        $output = array();

        //Is it an array?
        if( substr($str, 0, 5) == 'Array' ) {

            //Let's parse it (hopefully it won't clash)
            $array_contents = substr($str, 7, -2);
            $array_contents = str_replace(array('[', ']', '=>'), array('#!#', '#?#', ''), $array_contents);
            $array_fields = explode("#!#", $array_contents);

            //For each array-field, we need to explode on the delimiters I've set and make it look funny.
            for($i = 0; $i < count($array_fields); $i++ ) {

                //First run is glitched, so let's pass on that one.
                if( $i != 0 ) {

                    $bits = explode('#?#', $array_fields[$i]);
                    if( $bits[0] != '' ) $output[$bits[0]] = $bits[1];

                }
            }

            //Return the output.
            return $output;

        } else {

            //Duh, not an array.
            echo 'The given parameter is not an array.';
            return null;
        }

    }
?>

原文由 karllindmark 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果要将数组存储为字符串,请使用 serialize [docs]unserialize [docs]

回答你的问题:不,没有内置函数可以再次将 print_r 的输出解析为数组。

原文由 Felix Kling 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏