Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP Undefined index of array. Why?

Tags:

arrays

php

This is... I don't even know what this is happening.

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

What the?

Thanks.

like image 782
Sylwester Kardziejonek Avatar asked May 25 '12 17:05

Sylwester Kardziejonek


2 Answers

I think, you are using a debug extension, so the var_dump() output is different then standart library, properties can not be numeric but $obj->{'75'} is okay. If can you reach to the sub object by $items->{'75'} yes you have a numeric property. otherwise you can try print_r($items); and see the original output, or check the array after 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 issue : #45959

Read the casting blockquote: http://www.php.net/manual/en/language.types.array.php#language.types.array.casting

like image 52
Tufan Barış Yıldırım Avatar answered Nov 05 '22 11:11

Tufan Barış Yıldırım


Casting to an array doesn't work like that.

See here: get_object_vars() vs. cast to array

and here: http://www.php.net/manual/en/language.types.array.php#language.types.array.casting

Blockquote "If an object is converted to an array, the result is an array whose elements are the object's properties. The keys are the member variable names, with a few notable exceptions: integer properties are unaccessible; private variables have the class name prepended to the variable name; protected variables have a '*' prepended to the variable name. These prepended values have null bytes on either side.

like image 32
taz Avatar answered Nov 05 '22 09:11

taz