Pergunta

Estou tendo problemas ao analisar os dados retornados pelo meu serviço da web WCF.

O serviço da web está devolvendo uma matriz de strings, esses dados são colocados em um objeto StdClass, o problema que estou encontrando é que os dados mudam dependendo de haver 1 ou mais objetos.

Nunca tendo lidado com objetos stdclass, não tenho certeza do que fazer.

A seguir está o código que estou usando atualmente, $containers é o valor de retorno da chamada de serviço da web.

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

Se houver apenas 1 valor sendo retornado, o código a seguir funcionará bem e exibirá o nome do contêiner retornado.Se houver mais de 1 valor sendo retornado, $item->string se torna Array.existe alguma maneira de determinar quais valores stdclass contém?

var_dump com apenas 1 contêiner

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

var_dump com mais de 1 contêiner

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

Desde já, obrigado,

Matt

Foi útil?

Solução

você pode usar is_array($item->string) para verificar se você possui um array e processá-lo adequadamente.Com base no seu código, acho que algo assim pode funcionar para você.

<?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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top