2012-05-25 22 views
9

這是......我甚至不知道這是怎麼回事。PHP未定義的數組索引。爲什麼?

// var_dump of items before 
object(stdClass)[84] 
    public '75' => object(stdClass)[87] 

$items = (array) $items; // Casting unserialized stdClass to array 
var_dump($items); 

//Result of var dump: 
array 
    '75' => 
    object(stdClass)[87] 

//Now lets get this item: 
var_dump($items[75]); // Error 
var_dump($items['75']); // Error 

什麼?

謝謝。

+1

請顯示$ items –

+0

嘗試投射到另一個變量'$ new_items =(array)$ items; var_dump($ new_items [75]);' – Aziz

+0

這給了我相同的結果。 –

回答

4

我認爲,您正在使用調試擴展,所以var_dump()輸出不同於標準庫,屬性不能是數字,但$obj->{'75'}是好的。 如果可以通過$items->{'75'}達到子對象,那麼您的數值屬性爲yes。 否則,你可以嘗試print_r($items);看到原始輸出,或之後get_object_vars()

<?php 

$items = new stdClass(); 
$items->{'75'} = new stdClass(); 
$items->{'75'}->{'85'} = new stdClass(); 


$items = (array) $items; // Casting unserialized stdClass to array 
$items_array = get_object_vars($items); // getting object vars as an array. 

var_dump($items["75"]); // Error 
var_dump($items['75']); // Error 
var_dump($items_array['75']); // Works 

PHP問題檢查數組:#45959

閱讀鑄塊引用:http://www.php.net/manual/en/language.types.array.php#language.types.array.casting

+0

是的,當$ items仍然是一個對象時,我可以通過$ obj - > {'75'}來到達「75」。 請看:http://pastebin.com/nTbGscD5 –

+1

所以,你必須使用get_object_vars(); –

+0

它的工作,謝謝。這很奇怪,因爲在將它們轉換爲數組並將其運行後,$ items上使用了array_keys。 –

2

轉換爲數組不像那樣工作。

在這裏看到:get_object_vars() vs. cast to array

和這裏:http://www.php.net/manual/en/language.types.array.php#language.types.array.casting

塊引用 「如果一個對象被轉換成一個陣列,其結果是一個數組,其元素爲對象的屬性中的鍵是。成員變量名稱,但有一些值得注意的例外:整型屬性不可訪問;私有變量具有名稱前面的變量名稱;受保護的變量在變量名稱前加了一個'*',這些前綴的值在兩邊都有空字節。