2015-06-15 3 views
1

Первоначально, если в списке был один элемент, он возвращал объект, а не массив одного объекта. Я установил, что с помощью:Обработка пустых списков в PHP SOAP

https://eirikhoem.wordpress.com/2008/03/13/array-problems-with-soap-and-php-updated/

$x = new SoapClient($wsdl, array('features' => SOAP_SINGLE_ELEMENT_ARRAYS)); 

Но у меня возникают проблемы, когда нет элементов в списке.

Лучшее, что я придумал до сих пор:

$occulist = $result->GetWebOccurrencesResult->OccuList; 
if (!empty((array)($occulist))) { 
    foreach($occulist->TOccu as $occurrence) { 
     echo $occurrence->Prog_Name . ' running from ' . $occurrence->StartDate . ' to ' . $occurrence->EndDate . '<br/>'; 
    } 
} 

Первоначально он был

foreach($result->GetWebOccurrencesResult->OccuList->TOccu as $occurrence) { 
+0

И о чем эти проблемы вы говорите ..? Что это делает, что вы не хотите, чтобы это делалось? Что это НЕ делать, что вы хотите сделать? – Darren

+0

Мне было интересно, был ли более элегантный способ сделать это, как SOAP_SINGLE_ELEMENT_ARRAYS позволяет вам продолжать использовать foreach, когда есть один элемент. На данный момент я бросаю объект в виде массива, чтобы проверить, пуст ли он. –

+0

[This] (http://shwup.blogspot.com.au/2010/11/arrays-in-soap.html) может быть тем, что вы ищете – Darren

ответ

0

На моем сервере с ОС Windows и PHP 5.4.23 это:

if (!empty((array)($occulist))) { 

дает следующее сообщение об ошибке:

Parse error: syntax error, unexpected '(array)' (array) (T_ARRAY_CAST) 

Я установил его с помощью:

if (get_object_vars($occulist)) { 

Я думаю, что это более элегантная альтернатива оригиналу ...

0

Я не понимаю, именно то, что вы пытаетесь достичь здесь, так что если вы можете уточнить в комментариях, это было бы здорово.

Что я беру из вашего вопроса, так это то, что вы хотите обрабатывать, когда массив пуст, но нужен чистый метод? Цикл у вас там будет делать то, что вам требуется, но вот еще одна альтернатива:

do { 
    foreach($occulist->TOccu as $occurrence) { 
     echo $occurrence->Prog_Name . ' running from ' . $occurrence->StartDate . ' to ' . $occurrence->EndDate . '<br/>'; 
    } 
} while(empty((array)($occulist)) !== FALSE); 

Так вы перекручивание через Еогеасп пока $occulist массив не пуст. Вы даже можете сделать:

while((array)$occulist !== FALSE) { 
    foreach(....) { 
     ... 
    } 
} 
+0

Исходный код был: Еогеасп ($ result-> GetWebOccurrencesResult-> OccuList-> TOccu в $ появления) { В идеале первая часть Еогеасп бы оценить пустой массив, если список пуст, а затем он пропустит оператор foreach. –

+0

Затем измените это на ...? – Darren

+0

Он не обрабатывает пустые списки, как хотелось бы ... также, так как я создал переменную с именем $ occulist, она становится короче, чтобы изменить ее на foreach ($ occulist-> TOccu as $ появление) { –

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