首先,我试图在源代码中找到解决方案,但无法找到我正在寻找的内容,因此将其作为新问题发布。谢谢你的帮助
我想将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
答案 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);