如果我想将索引数组转换为对象,是否有办法访问根据数组元素创建的属性(使用->
运算符)?
<?php
$numeric_index_array = array(10, 20, 30) ;
$obj_numeric_index = (object)$numeric_index_array ;
var_dump($obj_numeric_index) ;
答案 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 !