从 PHP stdClass 获取属性名称



我有一个数组对象,看起来像:

$inDatabase = Array
(
[0] => stdClass Object
(
[abc@gmail.com] => Array
(
)
)
[1] => stdClass Object
(
[xyz@gmail.com] => Array
(
)
)
)

如何将电子邮件地址推送到新阵列上? 我尝试了以下方法:

$innerKeys =[];
$temp=[];
for($i=0;$i<2;$i++){
$temp = array_keys($inDatabase[$i])
//so I thought $temp[0] would have the email address but $temp is null.
array_push($innerKeys,$temp[0]);
}

array_keys()用于数组。要将对象属性转换为数组,请使用get_object_vars()。所以你想要

$temp = array_keys(get_object_vars($inDatabase[$i]));

演示

您可以使用array_reduce()get_object_vars()array_keys()

$emails = array_reduce($inDatabase, function ($arr, $obj) {
return array_merge($arr, array_keys(get_object_vars($obj)));
}, []);

工作示例:https://3v4l.org/IU3C9

您也可以只强制转换为数组并获取第一个密钥。 我稍微修改了一下:

foreach($inDatabase as $o) {
$innerKeys[] = array_keys((array)$o)[0];
}

但是,由于您想要第一个,因此key(令人惊讶(将处理一个对象:

foreach($inDatabase as $o) {
$innerKeys[] = key($o);
}

或者更简单:

$innerKeys = array_map('key', $inDatabase);

最新更新