Domanda

Sto avendo un problema analizzare i dati restituiti dal mio servizio Web WCF.

Il servizio Web sta passando indietro di una serie di stringhe, questi dati vengono inseriti in un oggetto STDClass, il problema che incontro è che i dati cambiano in base al fatto che ci siano 1 o più oggetti.

Non avendo mai affrontato gli oggetti stdclass Non sono davvero sicuro di cosa fare.

Di seguito è riportato il codice che sto utilizzando attualmente, $ contenitori è il valore di ritorno dalla chiamata di servizio Web.

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

Se c'è solo 1 valore restituito, il seguente codice funziona bene e visualizza il nome del contenitore restituito. Se c'è più di 1 valore restituito $ Item-> String diventa array.C'è comunque per determinare quali valori contiene stdclass?

var_dump con solo 1 contenitore

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

var_dump con più di 1 contenitore

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

Grazie in anticipo,

Matt

È stato utile?

Soluzione

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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top