2012-05-25 11 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'}でサブオブジェクトにアクセスできる場合は、数値プロパティがあります。 そうでなければ、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

は、鋳造BLOCKQUOTEを読む:配列へのキャスト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

それは働いて、ありがとう。配列にキャストして$ itemにarray_keysを使用していたので、それは変だった。 –

2

はしていませんそのように働く。

こちらをご覧ください:get_object_vars() vs. cast to array

、ここで:http://www.php.net/manual/en/language.types.array.php#language.types.array.casting

BLOCKQUOTE 「オブジェクトが、結果はその要素オブジェクトのプロパティである配列で、配列に変換されている場合は、キーです。メンバ変数の名前はいくつかの例外があります:整数プロパティはアクセスできません;プライベート変数はクラス名の前に変数名があり、保護された変数は変数名の前に '*'が付いています。

関連する問題