使用PHP解析带有数组的多维StdClass对象

3

我正在使用PHP访问一个WSDL webservice。读取工作得很好,但解析结果似乎有些困难:我尝试使用var_dump()来获取结果的样子。这是我用于vardump结果的PHP代码:

 foreach($result as $var => $value) {

  var_dump($value);
    echo "<br />";

}

这是我使用它得到的结果:
object(stdClass)#3 (3) {
 ["Successful"]=> bool(true) 
 ["MessageId"]=> string(0) "" 
 ["MlsMessageText"]=> string(0) "" 
 } 

object(stdClass)#4 (3) { 

["RowCount"]=> int(3) 
["ColumnCount"]=> int(3) 
["Columns"]=> object(stdClass)#5 (1) { 

    ["Column"]=> array(3) { 

            [0]=> object(stdClass)#6 (2) { 

                ["Name"]=> string(5) "RowID" 
                ["Rows"]=> object(stdClass)#7 (1) { 

                    ["string"]=> array(3) { 
                    [0]=> string(5) "12001" 
                    [1]=> string(5) "12002" 
                    [2]=> string(5) "12003" } } } 

            [1]=> object(stdClass)#8 (2) { 

                ["Name"]=> string(8) "PersonID" 
                ["Rows"]=> object(stdClass)#9 (1) { 

                    ["string"]=> array(3) { 
                    [0]=> string(11) "12033310001" 
                    [1]=> string(11) "12033310002" 
                    [2]=> string(11) "12033310003" } } } 

            [2]=> object(stdClass)#10 (2) { 

                ["Name"]=> string(10) "PersonName" 
                ["Rows"]=> object(stdClass)#11 (1) { 

                    ["string"]=> array(3) { 
                    [0]=> string(10) "Jack Jones" 
                    [1]=> string(11) "Jenifer Row" 
                    [2]=> string(12) "Marin Banker" } } }

        } 
    } 
} 

这是一个相当复杂的答案,我不知道如何通过循环来解析它。最终我想获得包含数据的表格。

非常感谢您的帮助:)

3个回答

3

对象是可迭代的,所以您可以使用foreach循环遍历它们。只需创建一个包含foreach循环的递归函数即可。例如:

function loop($input)
{
    foreach ($input as $value)
    {
        if (is_array($value) || is_object($value))
            loop($value);
        else
        {
            //store data
            echo $value;
        }
    }
}

但是如果我像这样循环,我无法检测出我输出的$value是列的["Name"]还是['value'],对吧?(抱歉,我在PHP方面还是初学者...) - colosso

2
问题在于他们将表格转换为列 -> 行而不是行 -> 列,您可以通过创建一个新表格并反转列和行来解决这个问题。
$table = array();

foreach ($result['xxx']->Columns->Column as $colnr => $coldata) {
    foreach ($coldata->Rows->string as $rownr => $rowdata) {
        $table[$rownr][$coldata->Name] = $rowdata;
    }
}

print_r($table);

顺便说一下,$result['xxx']是无法使用的,应该用正确的键名替换'xxx'


我更喜欢这种方式。这是一个非常好的解决方案,让之后处理数据变得非常容易。非常感谢! - colosso

0

我有一个类似的问题。我从代码中以JSON格式获得结果。当我使用json_decode时,通过var_dump方法发现在解码过程中数组内部创建了一些对象。

下面您看到的var_dump是针对我的变量的。

$result.

如果我想从我的变量中访问 "status" 数组,我使用了以下代码,它完美地工作了 :)
$result[0]->status

我想要包含我的查询结果的那个数据。
array(1) {
  [0]=>
  object(stdClass)#3 (3) {
    ["status"]=>
    string(9) "Connected"
    ["message"]=>
    string(34) "Connected to database successfully"
    ["data"]=>
    array(1) {
      [0]=>
      object(stdClass)#2 (10) {
        ["id"]=>
        string(36) "cc569871-6544-11e3-945d-0e184c35292b"
        ["login_name"]=>
        string(22) "tkamran@premierbpo.com"
        ["login_password"]=>
        string(8) "Lead6291"
        ["notes"]=>
        NULL
        ["created_by"]=>
        string(7) "default"
        ["created_on"]=>
        string(19) "2013-12-15 12:52:46"
        ["last_modified_by"]=>
        string(7) "default"
        ["last_modified_on"]=>
        string(19) "2013-12-15 12:52:46"
        ["is_current"]=>
        string(3) "yes"
        ["is_active"]=>
        string(3) "yes"
      }
    }
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接