PHP que se conecta a los datos de devolución del servicio WCF
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
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>