Pregunta

Estoy teniendo un problema al analizar los datos que son devueltos por mi servicio web WCF.

El servicio web está devolviendo una variedad de cuerdas, estos datos se colocan en un objeto STDCLASS, el problema que encuentro es que los datos cambian dependiendo de si hay 1 o más objetos.

Nunca he tratado con los objetos STDCLASS, no estoy realmente seguro de qué hacer.

El siguiente es el código que estoy usando actualmente, $ contenedores es el valor de retorno de la llamada de servicio web.

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

Si solo se devuelve 1 valor, el siguiente código funciona bien y muestra el nombre del contenedor devuelto. Si se devuelve más de 1 valor $ elemento-> la cadena se convierte en matriz.¿Hay alguna manera de determinar qué valores contiene STDCLASS?

var_dump con solo 1 contenedor

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

var_dump con más de 1 contenedor

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

gracias de antemano,

Matt

¿Fue útil?

Solución

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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top