2013-05-16 13 views
17

stavo cercando di copiare questo codice:PHP Errore: Impossibile utilizzare oggetto di tipo stdClass come matrice (array e di oggetto questioni)

<?php 
foreach ($products as $product) { 
    $id   = $product['id']; 
    $name  = $product['name']; 
    $description = $product['description']; 
    $price  = $product['price']; 
?> 
    <tr> 
    <td><img src="<?php echo $product['picture']; ?>" /></td> 
     <td><b><?php echo $name; ?></b><br /> 
     <?php echo $description; ?><br /> 
      Price:<big style="color:green"> 
      $<?php echo $price; ?></big><br /><br /> 
<?php 
    echo form_open('cart/add'); 
    echo form_hidden('id', $id); 
    echo form_hidden('name', $name); 
    echo form_hidden('price', $price); 
    echo form_submit('action', 'Add to Cart'); 
    echo form_close(); 
?> 
    </td> 
    </tr> 
    <tr><td colspan="2"><hr size="1" /></td> 
<?php 
} 
?> 

e qui è il mio codice:

<?php 
    foreach ($blogs as $blog) { 
     $id  = $blog['id']; 
     $title = $blog['title']; 
     $content = $blog['content']; 
?> 
     <h1><?php echo $title; ?></h1> 
     <h1> <?php echo $content; ?> </h1> 

<?php 
} 
?> 

ottengo questo errore ogni volta che ho eseguito il mio codice: "non è possibile utilizzare l'oggetto di tipo stdClass come allineamento"

+1

Prova invece la sintassi dell'oggetto: '$ blog-> id' – str

+0

bene $ blog sembra essere un oggetto. Solo print_r() i tuoi $ blog per rivedere la struttura – thpl

+0

prova ad usare -> operatore –

risposta

49

L'esempio da cui si è copiato utilizza i dati sotto forma di array in cui sono presenti array, si utilizzano dati sotto forma di un array contenente oggetti. Oggetti e matrici non sono la stessa cosa, e per questo usano diverse sintassi per accedere ai dati.

Se non si conoscono i nomi delle variabili, basta fare un var_dump($blog); all'interno del ciclo per vederli.

Il più semplice metodo - l'accesso $ blog come un oggetto direttamente:

Try (assumendo che le variabili sono corrette):

<?php 
    foreach ($blogs as $blog) { 
     $id   = $blog->id; 
     $title  = $blog->title; 
     $content = $blog->content; 
?> 

<h1> <?php echo $title; ?></h1> 
<h1> <?php echo $content; ?> </h1> 

<?php } ?> 

L'alternativa metodo - l'accesso $ blog come un array:

In alternativa, è possibile trasformare $blog in una matrice con get_object_vars (documentation):

<?php 
    foreach($blogs as &$blog) { 
     $blog  = get_object_vars($blog); 
     $id  = $blog['id']; 
     $title = $blog['title']; 
     $content = $blog['content']; 
?> 

<h1> <?php echo $title; ?></h1> 
<h1> <?php echo $content; ?> </h1> 

<?php } ?> 

vale la pena ricordare che questo non è necessariamente di andare a lavorare con gli oggetti nidificati così la sua vitalità dipende interamente la struttura del vostro $blog oggetto.

Meglio di entrambi di quanto sopra - Inline PHP Sintassi

Detto tutto questo, se si desidera utilizzare PHP nel modo più leggibile, né di quanto sopra sono a destra. Quando si utilizza PHP mescolati con l'HTML, è considerato migliori pratiche da molti come utilizzare PHP di alternative syntax, questo ridurrebbe tutto il codice da nove a quattro linee:

<?php foreach($blogs as $blog): ?> 
    <h1><?php echo $blog->title; ?></h1> 
    <p><?php echo $blog->content; ?></p> 
<?php endforeach; ?> 

Spero che questo ha aiutato.

+0

Lo ha fatto per me! Ho a che fare con una dannata API esterna il cui risultato ha chiavi come "F_123123123" e anche "-105". – MikingTheViking

16

$ blog è un una matrice non oggetto

provare a utilizzare $blog->id invece di $blog['id']

+0

grazie, hai risolto il mio problema. ma ho preso questo codice che stavo cercando di copiare. Ecco qui. –

+0

http://stackoverflow.com/questions/16589313/php-error-cannot-use-object-of-type-stdclass-as-array –

2

$ blog è un oggetto, non un array, così si dovrebbe accedere in questo modo:

$blog->id; 
$blog->title; 
$blog->content; 
3

ci potrebbero due questioni

1) $blogs may be a stdObject 

o

2) The properties of the array might be the stdObject 

Provare a usare var_dump ($ blog) e vedere il problema reale se e le proprietà di matrice hanno stdObject provare come questo

$blog->id; 
$blog->content; 
$blog->title; 
+0

Un rapido var_dump() di ciascuno potrebbe essere in ordine. – TML

1

Se stai iterazione su un oggetto invece di un array, sarà necessario accedere alle proprietà utilizzando:

$id = $blog->id; 
$title = $blog->title; 
$content = $blog->content; 

Che, o il cambiamento il tuo oggetto a un array.

+0

voglio che il mio codice appaia come da dove copio il codice. perché devo cambiarlo così? il codice da cui sto copiando non è sbagliato? –

2

oggetto stdClass si accede utilizzando ->

foreach ($blogs as $blog) { 
    $id   = $blog->id; 
    $title = $blog->title; 
    $content = $blog->content; 
} 
+0

sì ... ma mi chiedevo perché non posso copiare il codice sopra. come questo \t foreach ($ blog come $ blog) { \t \t \t $ id \t \t = $ blog [ 'id']; \t \t \t $ title \t \t = $ blog ['title']; \t \t \t $ content \t = $ blog ['contenuto']; ?? \t> \t \t \t \t \t \t

\t \t \t

+1

@EmmanuelJosephUBastero - Non è possibile copiare il codice perché sta lavorando con una serie di array e si sta lavorando con una serie di oggetti. È come chiedere perché non si può copiare come qualcuno guida un'auto su un monociclo, sono strumenti totalmente diversi. Ho spiegato nella mia risposta come trasformare i tuoi oggetti in matrici. –

Problemi correlati