Php 字符串到对象的转换

Php 字符串到对象的转换,php,parsing,object,Php,Parsing,Object,我正在遍历一个数据库表,该表包含一些与外部API响应相关的数据 有人将回复保存为文本,如下所示: object(stdClass)#5 (1) { ["CreateProspectResult"]=> object(stdClass)#6 (3) { ["State"]=> string(7) "Success" ["ErrorMessage"]=> string(0) "" ["ReturnValue"]=> ob

我正在遍历一个数据库表,该表包含一些与外部API响应相关的数据


有人将回复保存为文本,如下所示:

object(stdClass)#5 (1) {
  ["CreateProspectResult"]=>
  object(stdClass)#6 (3) {
    ["State"]=>
    string(7) "Success"
    ["ErrorMessage"]=>
    string(0) ""
    ["ReturnValue"]=>
    object(stdClass)#7 (1) {
      ["ProspectID"]=>
      int(304)
    }
  }
} 
我猜最初的开发人员使用
标记执行了
var\u dump()
,并按字面意思保存了响应

<?php

$string = '
object(stdClass)#5 (1) {
  ["CreateProspectResult"]=>
  object(stdClass)#6 (3) {
    ["State"]=>
    string(7) "Success"
    ["ErrorMessage"]=>
    string(0) ""
    ["ReturnValue"]=>
    object(stdClass)#7 (1) {
      ["ProspectID"]=>
      int(304)
    }
  }
}
';

$xmlObj = simplexml_load_string($string);
echo $xmlObj->CreateProspectResult->State;
?>
当我在表结果中循环时,我想将字符串转换回一个对象,以便对其进行解析。我在这方面非常失败

以下是我的尝试:

function unvar_dump($str) {
    if (strpos($str, "\n") === false) {
        //Add new lines:
        $regex = array(
            '#(\\[.*?\\]=>)#',
            '#(string\\(|int\\(|float\\(|array\\(|NULL|object\\(|})#',
        );
        $str = preg_replace($regex, "\n\\1", $str);
        $str = trim($str);
    }
    $regex = array(
        '#^\\040*NULL\\040*$#m',
        '#^\\s*array\\((.*?)\\)\\s*{\\s*$#m',
        '#^\\s*string\\((.*?)\\)\\s*(.*?)$#m',
        '#^\\s*int\\((.*?)\\)\\s*$#m',
        '#^\\s*float\\((.*?)\\)\\s*$#m',
        '#^\\s*\[(\\d+)\\]\\s*=>\\s*$#m',
        '#\\s*?\\r?\\n\\s*#m',
    );
    $replace = array(
        'N',
        'a:\\1:{',
        's:\\1:\\2',
        'i:\\1',
        'd:\\1',
        'i:\\1',
        ';'
    );
    $serialized = preg_replace($regex, $replace, $str);
    $func = create_function(
        '$match', 
        'return "s:".strlen($match[1]).":\\"".$match[1]."\\"";'
    );
    $serialized = preg_replace_callback(
        '#\\s*\\["(.*?)"\\]\\s*=>#', 
        $func,
        $serialized
    );
    $func = create_function(
        '$match', 
        'return "O:".strlen($match[1]).":\\"".$match[1]."\\":".$match[2].":{";'
    );
    $serialized = preg_replace_callback(
        '#object\\((.*?)\\).*?\\((\\d+)\\)\\s*{\\s*;#', 
        $func, 
        $serialized
    );
    $serialized = preg_replace(
        array('#};#', '#{;#'), 
        array('}', '{'), 
        $serialized
    );

    return unserialize($serialized);
}
CreateProspectResult->State;
?>
PHP不喜欢我的尝试,并且还给我非对象相关的错误


有没有可能把这样一个字符串转换成一个对象?

我不能100%确定这是否适用于对象(似乎是),但这似乎涵盖了您的问题

资料来源:

用API返回的内容或您没有直接访问API的权限的示例更新您的问题。除此之外,我不认为有任何从字符串到stdClass的现成转换器。”有人将响应保存为文本,如是说:“--loooooli没有直接访问API的权限,很遗憾。我被告知回复是上面贴的。