5

オブジェクトに変換された配列のプロパティ/値にアクセスするにはどうすればよいですか? たとえば、インデックス 0 の値にアクセスしたいのですが、

$obj = (object) array('qualitypoint', 'technologies', 'India');
var_dump($obj->0);

エラー、

解析エラー: 構文エラー、予期しない T_LNUMBER、C:...converting_to_object.php の 11 行目に T_STRING または T_VARIABLE または '{' または '$' が必要です

4

2 に答える 2

4

これを試す:

$obj = (object) array('test' => 'qualitypoint', 'technologies', 'India');

var_dump($obj->test);

結果は次のとおりです。

string(12) "qualitypoint"

しかし、にアクセスしようとする$obj->0と、同じエラーが表示されます:Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$'

オブジェクトをループすると、タフですが、通常の配列として通常どおりプロパティにアクセスできます。

foreach($obj as $x) {
    var_dump($x);
}

どうやら、プロパティの命名規則は基本的な変数の命名規則と同じです。

代わりに ArrayObject に変換すると、通常どおりインデックスにアクセスできます。

$obj = new ArrayObject(array('qualitypoint', 'technologies', 'India'));

そしてそれをダンプします:

var_dump($obj[0]);

あなたは得るでしょう:

string(12) "qualitypoint"
于 2012-04-04T14:35:21.433 に答える
2

$obj->0PHP 変数の命名に反するため、それを介して値にアクセスできない理由については、 http://php.net/manual/en/language.variables.basics.phpを参照してください。使用しArrayObjectても同じ問題が発生します

しかし、これにはパッチがあります...すべての整数キーを文字列に変換するか、独自の変換関数を書くことができます

$array  = array('qualitypoint', 'technologies', 'India' , array("hello","world"));
$obj = (object) $array;
$obj2 = arrayObject($array);
function arrayObject($array)
{
    $object = new stdClass();
    foreach($array as $key => $value)
    {
        $key = (string) $key ;
        $object->$key = is_array($value) ? arrayObject($value) : $value ;
    }
    return $object ;
}
var_dump($obj2->{0}); // Sample Output
var_dump($obj,$obj2); // Full Output to see the difference 


$sumObject = $obj2->{3} ; /// Get Sub Object
var_dump($sumObject->{1});  // Output world

出力

   string 'qualitypoint' (length=12)

フル出力

object(stdClass)[1]
  string 'qualitypoint' (length=12)
  string 'technologies' (length=12)
  string 'India' (length=5)

    array
      0 => string 'hello' (length=5)
      1 => string 'world' (length=5)

object(stdClass)[2]
  public '0' => string 'qualitypoint' (length=12)
  public '1' => string 'technologies' (length=12)
  public '2' => string 'India' (length=5)
  public '3' => 
    object(stdClass)[3]
      public '0' => string 'hello' (length=5)
      public '1' => string 'world' (length=5)

マルチアレイアウトパー

ありがとう

:)

于 2012-04-04T14:55:21.740 に答える