2012-06-23 123 views
-1
var_dump($img->files); 

object(stdClass)#17 (6) { 
    ["960"]= string(46) "/imgs/14c99db10ee9cc28bfa7db16e961fd65-960.jpg" 
    ["60"]= string(45) "/imgs/14c99db10ee9cc28bfa7db16e961fd65-60.jpg" 
    ["100"]= string(46) "/imgs/14c99db10ee9cc28bfa7db16e961fd65-100.jpg" 
    ["200"]= string(46) "/imgs/14c99db10ee9cc28bfa7db16e961fd65-200.jpg" 
    ["300"]= string(46) "/imgs/14c99db10ee9cc28bfa7db16e961fd65-300.jpg" 
    ["500"]= string(46) "/imgs/14c99db10ee9cc28bfa7db16e961fd65-500.jpg" 
} 

如何使用一個索引着訪問陣列

var_dump($img->files["60"]); 

失敗

致命錯誤:無法使用類型stdClass的對象作爲數組

+0

您是否試過$ img-> files - > {「60」}? (原諒我,如果語法稍微關閉,已經有一段時間PHP –

+1

可能重複[鑄造數組作爲對象的數組]鍵(http://stackoverflow.com/questions/1869812/casting-an-array-with -numeric-keys-as-an-object?rq = 1) – Gordon

+1

選民注意到「這不是一個真正的問題」:這是一個真正的問題,這是一個非常意想不到的,在PHP中沒有記錄的缺陷。 – lanzz

回答

2

它說正確的,在你的var_dump $img->files不是一個數組,它是類stdClass的一個對象。

您應該使用對象語法來訪問它。

$img->files->{'60'}; 
+4

你真的嘗試過嗎? ) – raina77ow

+1

是的,我做過。我沒有生成他的$ img對象或他的$ img-> files對象的代碼。但我自己生成了一些這樣的對象,並通過箭頭操作符訪問它。 –

+0

也試過,並得到'未定義的屬性:stdClass的:: $ 60',好像PHP的不明原因weidnesses之一。 – lanzz

1

這就是我們如何能得到類似的數據結構,你得到了什麼:

$img = new stdClass(); 
$img->files = array(960 => "/imgs/14c99db10ee9cc28bfa7db16e961fd65-960.jpg"); 
$img->files = (object)$img->files; 

...那麼這個:

var_dump($img->files->{'960'}); // NULL 

...將只打印NULL。但這...

$img->files = (array)$img->files; 
var_dump($img->files[960]); 

...將工作。 )你需要將一個類似數組的對象(它明顯地被一些外部代碼錯誤地轉換爲對象)返回給數組。然後像平常一樣訪問它的元素。

Fiddle要玩。

更新:...這裏是一個link的帖子,這解釋了這種行爲的原因比我所能做到的要好得多。 )

0

PHP 5.3.10,運行這個測試:

$obj = (object)array(10 => 'foo'); 
$obj->{20} = 'bar'; 

var_dump($obj); 

print($obj->{10}."\n"); 
print($obj->{20}."\n"); 

運行它,我得到這樣的結果:

object(stdClass)#1 (2) { 
    [10]=> 
    string(3) "foo" 
    ["20"]=> 
    string(3) "bar" 
} 
PHP Notice: Undefined property: stdClass::$10 in /home/lanzz/tmp/test.php on line 8 

bar 

所以,從數組轉換數字屬性會被分配給實際整數性質在不可訪問的對象中,而分配給該對象的數字屬性獲取可訪問的字符串屬性。

我投票它只是PHP中的另一個錯誤。

+1

我想這個縮寫,就像YAPHPB。 ) – raina77ow