Вопрос

У меня проблема с анализом данных, возвращаемых данными моей веб-службой WCF.

Веб-сервис передает массив строк, эти данные введены в объект STDClass, проблема, с которой я сталкиваюсь, заключается в том, что данные изменяются в зависимости от того, есть ли 1 или более объектов.

никогда не имел дело с объектами stdclass, я не совсем уверен, что делать.

Ниже приведен код, который я использую в настоящее время, $ контейнеры - это возвращаемое значение из веб-сервиса.

<ul>
<?php var_dump($containers)?>
<?php foreach($containers as $item):?>
<li>
<?php 
echo $item->string;
?>
</li>
<?php endforeach;?>
</ul>
.

Если есть только 1 возвращаемое значение, то следующий код работает нормально и отображает возвращенное имя контейнера. Если есть более 1 возвращаемого значения $ reat-> String, становится массивом.Есть ли в любом случае, чтобы определить, какие значения stdclass содержит?

var_dump только с 1 контейнером

object(stdClass)[13]
public 'GetContainersResult' => 
object(stdClass)[14]
public 'string' => string 'container1' (length=10)
.

var_dump с более чем 1 контейнером

object(stdClass)[13]
public 'GetContainersResult' => 
object(stdClass)[14]
public 'string' => 
array
0 => string 'container1' (length=10)
1 => string 'container2' (length=10)
.

Спасибо заранее,

Мэтт

Это было полезно?

Решение

you can use is_array($item->string) to check if you have an array and then process it appropriately. Based on your code, I think something like this might work for you.

<?php var_dump($containers)?>
<ul>
<?php foreach($containers as $item):
         if(is_array($item->string)):
            foreach($item->string as $subitem):
                <li class="subitem"><?php echo $subitem; ?></li>
            <?php 
            endforeach;
         else: ?>
        <li><?php echo $item->string; ?></li>
          <?php 
          endif;
      endforeach;    
?>
</ul>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top