是否将数组值转换为类属性资源密集型?

时间:2015-04-27 16:00:57

标签: php

我有一个大约有50个按键的阵列。值。我想从数组中获取数组并创建类属性:

$arr = array();
$arr['name'] = 'John';
$arr['age'] = '20';

$object = (object) $arr;

echo $object->name;

我的问题是,这是非常耗费资源的吗?是否需要大量阵列的开销?如果是这样,会有更好的方法吗?

此外,如果阵列设置为:

,则不起作用
$arr = array();
$arr['name']['boy'] = 'John';
$arr['name']['girl'] = 'Jane';
$arr['age']['boy'] = '20';
$arr['age']['girl'] = '30';

$object = (object) $arr;

echo $object->name->boy;

2 个答案:

答案 0 :(得分:0)

你可以这样做:

$arr = array();

$arr['name']['boy'] = 'John';
$arr['name']['girl'] = 'Jane';
$arr['age']['boy'] = '20';
$arr['age']['girl'] = '30';


$obj = json_decode(json_encode($arr)); //Turn it into an object


print_r($obj);    // to view the result

echo $obj->name->boy;   // output: John

它适用于简单数组和子数组。

我认为当我们使用子阵列并希望节省资源时,这是一个很好的解决方案

答案 1 :(得分:0)

根据documentation创建了一个stdClass类型的对象。我的猜测是,写时复制不起作用。使用memory_get_usage()进行的简短实验显示了以下结果(三种不同的脚本):

$arr=range(10,10000); $obj = $arr; var_dump(memory_get_usage()); // int(1717424)
$obj=(object)range(10,10000); var_dump(memory_get_usage()); // int(1717528)
$arr=range(10,10000); $obj = (object)$arr; var_dump(memory_get_usage());// int(2728048)

所以你肯定会使用更多的内存。如果你想减少资源,这样的事情应该有效:

$object = (object)array('name' => 'John');

更好的方法是从头开始使用对象:

$arr = new ArrayObject(array(), ArrayObject::STD_PROP_LIST);

虽然嵌套数组会遇到同样的问题。如果您知道数组的结构,请尝试扩展ArrayObject。或者,您可以编写自己的offsetSet()方法来实现所需的行为。看看ArrayAccess