如何将数组转换为对象

时间:2014-06-11 07:40:42

标签: php arrays object stdclass

首先,我试图在源代码中找到解决方案,但无法找到我正在寻找的内容,因此将其作为新问题发布。谢谢你的帮助

我想将Array转换为Object。这是我得到的输出

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [username] => robustsolver
            [first_name] => John
            [last_name] => Smith
        )

    [1] => stdClass Object
        (
            [id] => 2
            [username] => pickypacker
            [first_name] => Peter
            [last_name] => Packer
        )

)

因此,如果我想要为所有用户创建任何列,而不是我必须编写代码$users[0]->first_name;,这只给我一个项目。但我要看的是使用$users->first_name,这应该返回所有用户列的数组(这里是first_name)

希望我能以更好的方式解释。 :S

4 个答案:

答案 0 :(得分:1)

也许这样的事情会起作用(未经测试):

$arr = array(...); // array of objects (in)
$obj = new Object; // object of arrays (out)

foreach($arr as $a) {
    foreach(get_object_vars($a) as $k=>$v) {
        if(!property_exists($obj, $k)) {
            $obj->{$k} = array();
        }
        $obj->{$k}[] = $v;
    }
}

答案 1 :(得分:1)

您可以尝试使用$arr是您的数组:

function filter_callback($element) {
    return $element->first_name;
}
$result= array_map('filter_callback', $arr);

从快速测试来看,这似乎有效。它保持数组的对象没有您想要的属性,但其值设置为NULL。不确定这是否是您想要的,但您可以修改filter_callback以删除此类元素。

答案 2 :(得分:1)

考虑定义一个新类:

class User_objects
{
    public $first_name;
    public $username;
    public $last_name;

    public function __construct()
    {
        $this->first_name = array();
        $this->username = array();
        $this->last_name = array();
    }
}

然后: 将$array_of_objects视为您的对象数组(输入)。

$users = new User_objects();

foreach ($array_of_objects as $object)
{
     $users->first_name[] = $object->first_name; // append to array
     $users->last_name[] = $object->last_name;
     $users->username[] = $object->username;
}

然后您可以从$users->first_name

获取数组

答案 3 :(得分:1)

您可以编写一个简单的辅助函数来帮助您选择要添加的列:

function prop_selector($prop)
{
    return function($item) use ($prop) {
        return $item->{$prop};
    };
}

$first_names = array_map(prop_selector('first_name'), $users);
$last_names = array_map(prop_selector('last_name'), $users);