2009-11-04 14 views
8

ho convertito un array di opporsi dati simili:PHP riferendosi ad oggetto dati con tasto numerico

<?php 
$myobject->data = (object)Array('zero','one','two'); 
print_r($myobject); 
?> 

e l'uscita è:

stdClass Object ([data] => stdClass Object ([0] => zero [1] => one [2] => two))

Quindi così buono. Ma se provo a fare riferimento ai tasti numerici ...

<?php 
$myobject->data = (object)Array('zero','one','two'); 
$counter = 1; 
echo $myobject->data->$counter; 
?> 

... non viene restituito nulla! Mi aspetterei che facesse eco a "uno".

Sto sbagliando?

risposta

15

Questa è una stranezza in PHP, è necessario accedervi utilizzando $object->data->{1}. Oppure puoi convertirlo nuovamente in array per accedere ai membri. Ma penso che è meglio avere nomi propri per i membri di oggetto, provare qualcosa di simile, per esempio:

$myobject->data = (object)Array('m0' => 'zero','m1' => 'one','m2' => 'two'); 
$myObject->data->m1; 
1

Si potrebbe provare ad accedervi come un elemento di matrice. Ma non sono sicuro che funzionerebbe o meno. Tuttavia, ciò che si può fare è il looping sugli elementi oggetto (o meglio, proprietà) usando un ciclo foreach.

Come così:

foreach ($myobject->data as $key => $value) 
    echo "$key is my key.<br />"; 

io non sono solo sicuro se è possibile accedere alla chiave, anche.

+0

Hai provato questo? Sarei interessato a sapere se funziona. Altrimenti, usa la soluzione di Soulmerge. – Franz

-3
echo $myobject->data[$counter]; 

Se non mi sbaglio.

+0

Errore irreversibile: impossibile usare l'oggetto di tipo stdClass come array –

+2

Fintanto che la classe non implementa ArrayAccess, non è possibile accedervi in ​​questo modo: http://de2.php.net/manual/de/class.arrayaccess .php – Boldewyn

1

Il problema che hai è, che $counter viene automaticamente convertito in stringa per il look-up. Prova

$myobject->$counter = "abc"; 
var_dump($myobject); 

e vedrai cosa intendo. Per aggirare questo uso, il metodo proposto da Franz.

Problemi correlati