我有一个数组对象,看起来像:
$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);