PHP - работа со строкой массива

Я написал вызов 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

Вобще print_r(array_values($users));

HTMHell 31.07.2018 16:25

Разве вещь, возвращаемая findAll(), уже не является массивом массивов? Просто верни это.

Alex Howansky 31.07.2018 16:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
276
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вы создаете 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;
}

Вы можете сказать, в какой строке?

RiggsFolly 31.07.2018 16:37

Array, Array {"success": false, "data": null, "message": "Примечание: преобразование массива в строку", "code": 500, "debug": {"trace": "# 0 [внутренняя функция ] ... не говорит

developsss 31.07.2018 16:38

@developsss Да, прекратите использовать echo для печати массивов. Вместо этого используйте var_dump(), чтобы узнать, что они содержат.

Xatenev 31.07.2018 16:39

Я думаю, что эта ошибка может быть связана с чем-то, что вы делаете ниже в этом коде.

RiggsFolly 31.07.2018 16:43

это должно работать

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().

Источник: http://php.net/manual/en/function.array-push.php

$users = $this->getUserRepository()->findAll();
$i=0;
foreach ($users as $user){
    $data[$i][] = $user->getId();
    $data[$i][] = $user->getEmail();
    $data[$i][] = $user->getUsername();
    $i++;

}

Спасибо за этот фрагмент кода, который может предоставить некоторую немедленную помощь. правильное объяснение значительно улучшило бы его долгосрочную ценность, показывая Зачем, это хорошее решение проблемы, которое сделает его более полезным для будущих читателей с другими похожими вопросами. Пожалуйста, редактировать свой ответ, чтобы добавить некоторые пояснения, включая сделанные вами предположения.

Goodbye StackExchange 01.08.2018 03:58
Ответ принят как подходящий

На мой взгляд, все предыдущие ответы не так хороши. Вам не нужен дополнительный петля, просто создайте запрос. (И вернитесь с необходимой гидратацией)

Например

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.

И это решение, которое сработало для меня. Всем спасибо, ребята!

developsss 01.08.2018 09:59

Спасибо всем, ребята, за помощь, но мне это понравилось, и у меня это работает.

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;
}

Другие вопросы по теме