PHP: массив работает странно в foreach - PullRequest
1 голос
/ 25 октября 2010

У меня есть класс, который запрашивает данные через клиент 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) 
} 

, но второй var_dump ($ note-> ResourceID) в цикле foreach показывает только

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);

Если вы пытаетесь отладить это некоторое время, может кто-нибудь предложить какие-либо предложения?

С уважением,

Джоунси

Ответы [ 2 ]

2 голосов
/ 25 октября 2010

Если я не ошибаюсь, вы делаете это неправильно. $noteso имеет ряд свойств, среди которых ResourceID.

foreach проходит через каждое свойство этого объекта. Эти свойства не будут иметь свойства с именем ResourceID.

Похоже, что вы должны сделать, это сбросить foreach и адрес $noteso->ResourceID.

1 голос
/ 25 октября 2010

Похоже, $noteso = $result->queryResult->EntityResults->Entity; возвращает единственный объект,

Может быть, необходим цикл while, какой мыльный клиент вы используете?

...