2014-07-09 6 views
0

개체에 인덱스 배열을 캐스팅하려면 배열 요소에 따라 생성 된 속성 (-> 연산자 사용)에 액세스 할 수있는 방법이 있습니까?다음 속성에 액세스하는 방법?

<?php 
$numeric_index_array = array(10, 20, 30) ; 

$obj_numeric_index = (object)$numeric_index_array ; 

var_dump($obj_numeric_index) ; 
+0

이해가 안됩니다. 배열과 같은 객체 속성에 액세스하려고합니까? 왜 당신은 객체 컨텍스트에 있지 않습니까? –

답변

0

숫자 만 있으면 필드에 액세스 할 수 없습니다. 객체를 간단한 1 차원 배열로 캐스팅하면 필드가 숫자가됩니다.

array(10, 20, 30); // same as: array(0 => 10, 1 => 20, 2 => 30); 

유일한 방법은 일부 문자가있는 2 차원 배열을 만드는 것입니다. 예 :

<?php 
$numeric_index_array = array('1.' => 10, 2 => 20, '3' => 30) ; 

$obj_numeric_index = (object)$numeric_index_array ; 

var_dump($obj_numeric_index); 

echo $obj_numeric_index->1.;  // no 
echo $obj_numeric_index->'1.'; // no 
echo $obj_numeric_index->{'1.'}; // OK ! 
echo $obj_numeric_index->2.;  // no 
echo $obj_numeric_index->'2';  // no 
echo $obj_numeric_index->{'2'}; // no 
echo $obj_numeric_index->3;  // no 
echo $obj_numeric_index->{3};  // no 
echo $obj_numeric_index->{'3'}; // no 

실용적이지 않습니다.


편집. 배열을 객체로 변환하는 올바른 방법은 다음과 같습니다.

<?php 
$numeric_index_array = array(10, 20, 30) ; 

$obj = new StdClass; 
array_walk($numeric_index_array, function(&$val, $key) use (&$obj) { 
    $obj->{$key} = $val; 
}); 

echo $obj->{1}; // OK ! 
관련 문제