2012-05-25 13 views
9

To jest ... Nie wiem nawet, co się dzieje.PHP Nieokreślony indeks tablicy. Czemu?

// 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 

Co?

Dzięki.

+1

proszę pokazać $ items –

+0

Spróbuj rzucić na inną zmienną '$ new_items = (array) $ items; var_dump ($ new_items [75]); ' – Aziz

+0

Daje mi to ten sam wynik. –

Odpowiedz

4

Myślę, że używasz rozszerzenia debugowania, więc wyjście var_dump() różni się od standardowej biblioteki, właściwości nie mogą być numeryczne, ale $obj->{'75'} jest w porządku. Jeśli możesz dotrzeć do obiektu podrzędnego przez $items->{'75'} tak, masz właściwość liczbową. inaczej można spróbować print_r($items); i zobaczyć oryginalne wyjście, lub sprawdzić tablicę po wydaniu 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

Przeczytaj blockquote rzucania: http://www.php.net/manual/en/language.types.array.php#language.types.array.casting

+0

Tak, jeśli $ items jest nadal obiektem, MOŻNA dotrzeć do "75" z '$ obj -> {'75'}'. Proszę, spójrz: http://pastebin.com/nTbGscD5 –

+1

, więc musisz użyć get_object_vars(); –

+0

Zadziałało, dzięki. To było dziwne, ponieważ użyłem array_keys na $ item po przesłaniu go do tablicy i zadziałało. –

2

Casting do tablicy nie tak to działa.

Patrz tu: get_object_vars() vs. cast to array

i tu: http://www.php.net/manual/en/language.types.array.php#language.types.array.casting

Blockquote „Jeżeli obiekt jest przekształcany do tablicy, to wynik jest macierzą, której elementy są właściwości obiektu Klucze są. nazwy zmiennych składowych, z kilkoma ważnymi wyjątkami: właściwości całkowite są niedostępne, zmienne prywatne mają nazwę klasy przedrostka nazwy zmiennej, zmienne chronione mają znak "*" dodany do nazwy zmiennej. Te wartości przedrostkowe mają po każdej stronie puste bajty.

Powiązane problemy