我想获取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网站;-)什么东西?
答案 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;
}