PHP:数组在foreach中表现奇怪

时间:2010-10-25 11:07:23

标签: php arrays api soap soap-client

我有一个通过SOAP客户端查询数据的类。查询结果作为对象数组返回。发生了一些奇怪的事情。我不确定它是否只发生在数组中有一个元素时。

以下是代码:

function getNotes($ticketid){

    $ticketid = $this->ms_escape_string($ticketid);

    $conn = new Connections();
    $client = $conn->connectToAPI();

    $xml = array('sXML' =>"<queryxml>".
                                "<entity>TimeEntry</entity>".
                                "<query>".
                                    "<field>TicketID".
                                        "<expression op='equals'>$ticketid</expression>".
                                    "</field>".
                                "</query>".
                        "</queryxml>");

    $result = $client->query($xml);

    $noteso = $result->queryResult->EntityResults->Entity;

    //set array counter
    $x=0;


    var_dump($noteso);

        foreach($noteso as $note){

            var_dump($note->ResourceID);

            $name = $this->getResourceName($note->ResourceID);


            $timeentryarray[$x] = array('createdate'     => $note->CreateDateTime,
                            'summarynotes'  => $note->SummaryNotes,
                            'resource'    => $name
                           );
            $x++;

        }

        return $timeentryarray;
}

当应用程序运行var_dump($ noteso)时没问题。打印

object(stdClass)#12 (15) {
    ["id"]=> int(36988)
    ["UserDefinedFields"]=> object(stdClass)#13 (0) { } 
    ["TicketID"]=> int(26390) 
    ["InternalAllocationCodeID"]=> int(28303142) 
    ["Date"]=> string(19) "2010-10-25T00:00:00" 
    ["StartDateTime"]=> string(19) "2010-10-25T04:59:00" 
    ["EndDateTime"]=> string(19) "2010-10-25T05:04:00" 
    ["HoursWorked"]=> float(0.08)
    ["HoursToBill"]=> float(0.0833333358) 
    ["OffsetHours"]=> float(0)
    ["SummaryNotes"]=> string(69) "Hi Sarah, Do you have an example of a bounced email? Regards Simon" 
    ["InternalNotes"]=> string(0) "" 
    ["RoleID"]=> int(24482927) 
    ["CreateDateTime"]=> string(23) "2010-10-25T05:06:28.023" 
    ["ResourceID"]=> int(29699970) 
} 

但是foreach循环中的第二个var_dump($ note-&gt; ResourceID)只显示

NULL

然后访问该数组的每一行都会引发错误:

Notice: Trying to get property of non-object in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\ClientPortal\classes\OpenTickets.php on line 204

第204行

$name = $this->getResourceName($note->ResourceID);

暂时试图调试这个,有人可以提供任何建议吗?

此致

Jonesy

2 个答案:

答案 0 :(得分:2)

如果我没有弄错的话,你会以错误的方式解决这个问题。 $noteso有许多属性,其中包括ResourceID

foreach正在运行该对象的每个属性。这些属性不具有名为ResourceID的属性。

看起来你应该做的就是放弃foreach和地址$noteso->ResourceID

答案 1 :(得分:1)

看起来$noteso = $result->queryResult->EntityResults->Entity;返回一个对象,

可能需要一个while循环,你使用的是什么soap-client?