如何访问以下属性?

时间:2014-07-09 12:14:48

标签: php arrays casting

如果我想将索引数组转换为对象,是否有办法访问根据数组元素创建的属性(使用->运算符)?

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

$obj_numeric_index = (object)$numeric_index_array ;

var_dump($obj_numeric_index) ;

1 个答案:

答案 0 :(得分:0)

如果只有数字,则无法访问字段。将对象转换为简单的一维数组时,字段为数字。

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

唯一的方法是使用一些字符创建二维数组。示例:

<?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 !