1

我在解析 WCF Web 服务返回的数据时遇到问题。

Web 服务正在传回一个字符串数组,该数据被放入一个 StdClass 对象,我遇到的问题是数据会根据是否存在 1 个或多个对象而变化。

从未处理过 stdclass 对象,我不确定该怎么做。

以下是我目前正在使用的代码,$containers 是 Web 服务调用的返回值。

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

如果只返回 1 个值,则以下代码可以正常工作并显示返回的容器名称。如果返回的值超过 1 个,则 $item->string 变为 Array。无论如何确定 stdclass 包含哪些值?

var_dump 只有 1 个容器

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

具有超过 1 个容器的 var_dump

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

提前致谢,

马特

4

1 回答 1

0

你可以is_array($item->string)用来检查你是否有一个数组,然后适当地处理它。根据您的代码,我认为这样的事情可能对您有用。

<?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>
于 2011-02-20T18:37:30.680 回答