2010-10-25 4 views
1

У меня есть класс, который является данными запроса через SOAP-клиент. результаты запроса возвращаются как массив объектов. Что-то странное происходит. Я не уверен, что это происходит только тогда, когда в массиве есть один элемент.PHP: Массив, действующий странно в foreach

Вот код:

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 ($ Примечание-> 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); 

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

С уважением,

Джоунси

ответ

2

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

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

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

+0

что-то похожее на то, что если у более чем одного результата, то он создает массив объектов, но если есть один результат, он просто возвращает объект. Я смог проверить это, выполнив if, если количество массивов - это больше, чем один объект доступа через цикл foreach, а другой - объект доступа без foreach – iamjonesy

+1

@iamjonesy, в этом случае вам придется приспособиться к возможности, например. используя 'is_array()'. –

+1

@iamjonesy альтернативно превращает его в массив, если он не один: 'if (! Is_array ($ noteso)) $ noteso = array ($ noteso);' –

1

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

Может быть петля в то время как требуется, то, что мыло-клиент вы используете?

+0

спасибо за ваш ответ, см. Мой ответ на @Pekka – iamjonesy

Смежные вопросы