Получить имена свойств из PHP stdClass - PullRequest
1 голос
/ 12 февраля 2020

У меня есть объект массива, который выглядит следующим образом:

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

Как мне поместить sh адреса электронной почты в новый массив? Я попробовал следующее:

$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]);

}

Ответы [ 3 ]

2 голосов
/ 13 февраля 2020

array_keys() для массивов. Чтобы превратить свойства объекта в массив, используйте get_object_vars(). Итак, вы хотите

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

DEMO

1 голос
/ 13 февраля 2020

Вы также можете просто привести к массиву и получить первый ключ. Я немного его изменил:

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

Однако, так как вам нужен первый, key (удивительно) будет работать с объектом:

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

Или намного проще:

$innerKeys = array_map('key', $inDatabase);
1 голос
/ 13 февраля 2020

Вы можете использовать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...