Я написал вызов API в symfony для возврата всех данных массива из базы данных.
public function getData()
{
$data = [];
$users = $this->getUserRepository()->findAll();
foreach ($users as $user){
array_push($data, $user->getId());
array_push($data, $user->getEmail());
array_push($data, $user->getUsername());
}
return $data;
}
У меня это получилось вот так
1,[email protected],userOne,2,[email protected],userTwo
но я хочу отсортировать каждую группу данных в новой строке, например
1,[email protected],userOne,
2,[email protected],userTwo
Разве вещь, возвращаемая findAll(), уже не является массивом массивов? Просто верни это.






Вы создаете 3 экземпляра в $data для каждой строки, возвращаемой из базы данных, вместо этого загружаете одно вхождение для каждой возвращаемой строки и помещаете в нее массив.
public function getData()
{
$data = [];
$users = $this->getUserRepository()->findAll();
foreach ($users as $user){
array_push($data, [$user->getId(), $user->getEmail(),$user->getUsername()]);
}
return $data;
}
Вы можете сказать, в какой строке?
Array, Array {"success": false, "data": null, "message": "Примечание: преобразование массива в строку", "code": 500, "debug": {"trace": "# 0 [внутренняя функция ] ... не говорит
@developsss Да, прекратите использовать echo для печати массивов. Вместо этого используйте var_dump(), чтобы узнать, что они содержат.
Я думаю, что эта ошибка может быть связана с чем-то, что вы делаете ниже в этом коде.
это должно работать
public function getData()
{
$data = [];
$users = $this->getUserRepository()->findAll();
foreach ($users as $user){
$data[$user->getId()][] = $user->getId();
$data[$user->getId()][] = $user->getEmail();
$data[$user->getId()][] = $user->getUsername();
}
return $data;
}
Другой способ сделать это:
public function getData()
{
$users = $this->getUserRepository()->findAll();
foreach ($users as $user) {
$data[] = [$user->getId(), $user->getEmail(),$user->getUsername()];
}
return $data;
}
Это устраняет накладные расходы на вызов функции array_push().
$users = $this->getUserRepository()->findAll();
$i=0;
foreach ($users as $user){
$data[$i][] = $user->getId();
$data[$i][] = $user->getEmail();
$data[$i][] = $user->getUsername();
$i++;
}
Спасибо за этот фрагмент кода, который может предоставить некоторую немедленную помощь. правильное объяснение значительно улучшило бы его долгосрочную ценность, показывая Зачем, это хорошее решение проблемы, которое сделает его более полезным для будущих читателей с другими похожими вопросами. Пожалуйста, редактировать свой ответ, чтобы добавить некоторые пояснения, включая сделанные вами предположения.
На мой взгляд, все предыдущие ответы не так хороши. Вам не нужен дополнительный петля, просто создайте запрос. (И вернитесь с необходимой гидратацией)
Например
public function test()
{
return $this->createQueryBuilder('user')
->select('user.id, user.email, user.username')
->getQuery()
->getResult(); // will return objects
// ->getArrayResult() -> will return array of arrays
}
Поместите его в свой пользовательский репозиторий, а затем вызовите его, а не метод findAll.
И это решение, которое сработало для меня. Всем спасибо, ребята!
Спасибо всем, ребята, за помощь, но мне это понравилось, и у меня это работает.
public function getData()
{
$results = $this->getUserRepository()->findAll();
$rows = [];
$rows[] = array(
"id",
"username",
"email"
);
foreach ($results as $row) {
$rows[] = array(
$row->getId(),
$row->getUsername(),
$row->getEmail()
);
}
return $rows;
}
Вобще
print_r(array_values($users));