Добавление в массив в массиве (построение групп данных) - PullRequest
1 голос
/ 04 апреля 2020

В PHP Я * oop через результаты из базы данных, и я хочу сгруппировать результаты в разделы, поэтому у меня есть следующий код ...

$query = $db->prepare('select groupid, myval1, myval2 from mytable');
$query->execute();
$query->bind_result($groupid, $myval1, $myval2);
$groups = [];
$currentgroup = null;
while ($query->fetch()) {
  if ($currentgroup == null || $currentgroup["groupid"] != $groupid) {
    $currentgroup = ["groupid" => $groupid, "values" => []];
    $groups[] = $currentgroup;
  }
  $currentgroup["values"][] = ["myval1" => $myval1, "myval2" => $myval2];
}
$query->close();

Это результаты в массиве $groups, содержащем отдельный элемент для каждой указанной группы c, но массив values остается пустым ...

$groups = [
  ["groupid" = 1, "values" = []],
  ["groupid" = 2, "values" = []],
  ["groupid" = 3, "values" = []]
]

Когда я отлаживаю через l oop, я могу обратите внимание, что $currentgroup["values"] заполнен правильно, но, похоже, что даже если $currentgroup был добавлен к $groups, значения не заполняются. Это говорит о том, что используются разные массивы, но я не вижу, как это исправить ... Я думаю, ссылки необходимы, но я изо всех сил пытаюсь понять, как.

Как мне исправить приведенный выше код приводит к ...

$groups = [
  ["groupid" = 1, "values" = [
    ["myval1" = 1, "myval2" = 2],
    ["myval1" = 3, "myval2" = 4]
  ],
  ["groupid" = 2, "values" = [
    ["myval1" = 5, "myval2" = 6],
    ["myval1" = 7, "myval2" = 8],
    ["myval1" = 9, "myval2" = 10]
  ],
  ["groupid" = 3, "values" = []]
]

1 Ответ

4 голосов
/ 04 апреля 2020

Если вы индексировали массив $groups по groupid, то вы можете использовать это для добавления значений в правильную группировку. Так что внутри вашего l oop становится ...

if ( !isset($groups[$groupid]) ) {
    $groups[$groupid] = ["groupid" => $groupid, "values" => []];
}
$groups[$groupid]["values"][] = ["myval1" => $myval1, "myval2" => $myval2];

Возможно, вы захотите удалить эти номера групп в конце, просто используйте array_values(), чтобы сделать это ...

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