有没有一种简单的方法来获取print_r或var_dump的输出并将其转换为数组?

时间:2011-07-25 16:03:47

标签: php arrays

我想获取var_dump或print_r的输出并将其转换为反映原始内容的数组。

转换这个:

stdClass Object
(
    [title] => Edison's Friends
    [status] => 1

    [field_deck_owner] => Array
        (
            [und] => Array
                (
                    [0] => Array
                        (
                            [uid] => 15
                        )

                )

        )

    [name] => Mack
)

到此:

$array =  array(
    'title' -> 'Edison's Friends',
    'status' -> '1',
    'field_deck_owner' = array (
        array(
            array (
                'uid'->15
                )
            )
        ),
    'name' = "Mack"

);

是否有脚本执行此操作?一个javascript网站;-)什么东西?

7 个答案:

答案 0 :(得分:1)

不是像你要求的解析器​​,但如果你只想要一个对象属性的数组,你可以直接cast it to an array

答案 1 :(得分:0)

嗯,只是把它设置得相等..

如果您 这样做:

var_dump($something);

SO DO:

$something_else = $something;

中提琴!你现在有一份副本。


更新

实际上你可以试试这个:get_object_vars()

var_dump($something);

SO DO:

$something_else = get_object_vars($something);

答案 2 :(得分:0)

没有简单的方法也没有内置的PHP函数来做到这一点。使用serialize()

答案 3 :(得分:0)

也许你可以为这个sintaxis更改用PHP编写的任何JSON类解析器的代码,看起来很相似。

答案 4 :(得分:0)

如果您的对象实际上只是一个StdClass,则将其转换为数组

$ array =(array)$ object;

如果对象具有受保护或私有属性,则可能会产生不良结果(属性名称中为空字节)。在这种情况下,我会考虑仅限公共场所

$ array = get_object_vars($ object)

答案 5 :(得分:0)

我使用这个功能:

function std_class_object_to_array($stdclassobject) 
{ 
    $_array = is_object($stdclassobject) ? get_object_vars($stdclassobject) :   $stdclassobject;
    foreach ($_array as $key => $value)  
    { 
        $value = (is_array($value) || is_object($value)) ? std_class_object_to_array($value) : $value; $array[$key] = $value;  
    } 
    return $array; 
}

答案 6 :(得分:0)

您可以使用以下代码来反转stdClass或Array的print_r。

你只需要使用reversePrint_r函数,它希望第一个参数是print_r输出的分割,第二个参数是print_r输出的第一个变量的索引,注意你不能放直接索引因为是引用参数,第三个参数指示if是数组还是stdObject。

function reversePrint_r($stringObject, &$index, $isArray) {
        $result = ($isArray) ? array () : new stdClass ();
        $continue = true;
        $numberSpacesOriginal = ((preg_match_all ( "/ +/", $stringObject [$index], $matches )) ? strlen ( $matches [0] [0] ) : 0);
        while ( $continue ) {
            $line = $stringObject [$index];
            $numberSpaces = ((preg_match_all ( "/ +/", $line, $matches )) ? strlen ( $matches [0] [0] ) : 0);
            if ((preg_match ( "/Array$/", $line )) || (preg_match ( "/stdClass Object$/", $line ))) {
                $isNextArray = (preg_match ( "/Array$/", $line )) ? true : false;
                $var_name = getVariableNameFromLine ( $line );
                $index += 2;
                $parameter = getListFromStdClass ( $stringObject, $index, $isNextArray );
                addResult ( $result, $var_name, $parameter, $isArray );
                $index ++;
            } else {
                $var_name = getVariableNameFromLine ( $line );
                $parameter = getParameterFromLine ( $line );
                addResult ( $result, $var_name, $parameter, $isArray );
            }
            $index ++;
            $numberSpaces = ((preg_match_all ( "/ +/", $stringObject [$index], $matches )) ? strlen ( $matches [0] [0] ) : 0);
            if ($numberSpaces != $numberSpacesOriginal) {
                $continue = false;
            }
        }
        return $result;
    }

function addResult(&$result, $key, $value, $isArray) {
    if (! $isArray) {
        $result = ( object ) array_merge ( ( array ) $result, array (
                $key => $value 
        ) );
    } else {
        $result [$key] = $value;
    }
}

function getVariableNameFromLine($line) {
    $result = split ( preg_quote ( "=>" ), $line );
    $result = preg_replace ( "/( *\[|\] *)/", "", $result [0] );
    return $result;
}

function getParameterFromLine($line) {
    $result = preg_replace ( "/^.*=> /", "", $line );
    $result = preg_replace("/\n/","",$result);
    return $result;
}