Следуя вашему примеру, вы можете получить идентификаторы с array_keys()
:
$lol = new lol();
$userIds = array_keys($users->get());
var_dump($userIds);
PHP преобразует целочисленные строки в целые при использовании массивов, поэтому вам придется преобразовать значения для последующего ввода:
$userIds = array_map('strval', $userIds);
Некоторые примечания:
Вы, очевидно, используете Firebase Admin SDK для PHP, но с методами, которые были устарел с давних пор. Я хотел бы предложить вам обновить до последней версии (4.40 на момент написания этой статьи) и следовать документации на https://firebase-php.readthedocs.io/.
Вместо записи
$acc = ServiceAccount::fromJsonFile(__DIR__ . '/secret/user-key.json');
$firebase = (new Factory)->withServiceAccount($acc)->create();
$database = $firebase->getDatabase();
вы должны использовать
$acc = __DIR__ . '/secret/user-key.json';
$factory = (new Factory)->withServiceAccount($acc);
$database = $factory->createDatabase();
В вашем примере вы звоните getSnapshot()
и getValue()
отдельно - обратите внимание, что это вызовет два отдельных вызова API Firebase (Database::getValue()
просто удобное сочетание клавиш для Database::getSnapshot()->getValue()
)
Более эффективный способ получения ключей, на которые вы ссылаетесь, состоит в использовании метода Reference::getChildKeys()
.
В свете всего этого я бы Я хотел бы предложить переписать ваш класс lol
примерно так:
class LolWut
{
/** @var \Kreait\Firebase\Database\Reference */
private $ref;
public function __construct($refName = 'signup_login')
{
$this->ref = (new Factory())
->withServiceAccount(__DIR__ . '/secret/user-key.json')
->createDatabase()
->getReference($refName); // Does not invoke a call to the Firebase APIs
}
public function getUsers()
{
return $this->ref->getSnapshot()->getValue();
}
/**
* @return string[]
*/
public function getUserIds(): array
{
return array_map('strval', $this->ref->getChildKeys());
}
}
Было бы также неплохо создать экземпляр фабрики вне вашего класса и передать только тому, что вам нужно внутри это работает.
Надеюсь, это поможет!