2009-11-04 60 views
8

對象數據我已經轉換的陣列,以對象像這樣的數據:PHP參照與數字鍵

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

並且輸出是:

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

到目前爲止好。但如果我嘗試參考數字鍵...

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

...沒有任何返回!我希望它能迴應「一個」。

我做錯了嗎?

回答

15

這在PHP中很奇怪,您需要使用$object->data->{1}來訪問它。或者您可以將其轉換回陣列以訪問成員。但我認爲這是最好有對象成員的專有名詞,嘗試這樣的事情,例如:

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

您可以嘗試以數組元素的形式訪問它。但我不確定這是否會起作用。 但是,你可以做的是使用foreach循環遍歷對象元素(或者說,屬性)。

像這樣:

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

我只是不知道你是否可以訪問關鍵了。

+0

你測試了嗎?我很想知道它是否有效。否則,只需使用soulmerge的解決方案。 – Franz 2009-11-04 12:47:10

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

如果我沒有弄錯。

+0

致命錯誤:不能使用類型爲stdClass的對象作爲數組 – 2009-11-04 12:39:59

+2

只要類沒有實現ArrayAccess,就不能以這種方式訪問​​它:http://de2.php.net/manual/de/class.arrayaccess .PHP – Boldewyn 2009-11-04 12:41:49

1

你的問題,即$counter將自動轉換爲字符串查找。嘗試

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

你會明白我的意思。爲了規避Franz提出的方法。