@fridriekh
Фулл-тайм эникей

Как вывести массив из базы с группировкой по значениям столбца?

Есть массив вида:
1 | 11
1 | 12
1 | 13
2 | 21
2 | 22

Как его вывести в таком виде?
1: 11, 12, 13
2: 21, 22
  • Вопрос задан
  • 2508 просмотров
Решения вопроса 3
IgorO2
@IgorO2
73
row = 1,2,3,4,5,6...
value = 11,12,13,14,16...

1) Делаем такой запрос к БД
SELECT row, GROUP_CONCAT(value) FROM tName GROUP BY row

2) За счет функции fetchAll(PDO::FETCH_CLASS), записываем все данные в массив.
Ответ написан
Комментировать
Я так понимаю,
Есть массив вида:
1 | 11
1 | 12
1 | 13
2 | 21
2 | 22

это данные из базы данных, если это так, то в цикле получения данных прописываем:
$arrQuery[$first_column][] = $second_column;

Далее получаем желаемый результат:
foreach ($arrQuery as $key => $value)
{
  echo $key . ': ';
  $value_value = implode(', ', $value);
  echo $value_value . '<br>';
}
Ответ написан
Комментировать
Запросы к БД в цикле — точно не то, что нужно.
Вообще, лучший вариант — отсортировать выборку по первому полю, и обходить ее, попутно выводя как-то так:
$arr = array(
    array(1, 11),
    array(1, 12),
    array(1, 13),
    array(2, 21),
    array(2, 22));

$last_key = -1;
foreach ($arr as $a) {
    if ($a[0] !== $last_key) {
        echo '<br>'.$a[0].': '.$a[1];
        $last_key = $a[0];
    } else {
        echo ', '.$a[1];
    }
}

Если же по каким-то причинам нельзя отсортировать выборку на уровне СУБД, можно либо отсортировать ее на уровне PHP (наверное, придется прибегнуть к usort()), либо воспользоваться array_reduce():
$arr = array(
    array(1, 11),
    array(1, 12),
    array(1, 13),
    array(2, 21),
    array(2, 22));

function f($o, $i) 
{
    $o[$i[0]][] = $i[1];
    return $o;
}

print_r(array_reduce($arr, 'f'));

На выходе будет массив такого вида:
Array
(
    [1] => Array
        (
            [0] => 11
            [1] => 12
            [2] => 13
        )
    [2] => Array
        (
            [0] => 21
            [1] => 22
        )
)

Думаю, вывести его в нужном виде не проблема. Но это уже подход, что называется, на любителя.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@fridriekh Автор вопроса
Фулл-тайм эникей
Временно решение: запрос к БД в цикле с условием WHERE
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы