【问题标题】:Adding to array in array (building groups of data)添加到数组中的数组(构建数据组)
【发布时间】:2020-07-16 13:59:12
【问题描述】:

在 PHP 中,我循环访问数据库中的结果,并且我想将结果分组,所以我有以下代码...

$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 数组包含每个特定组的单个项目,但values 数组仍然为空...

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

当我通过循环进行调试时,我可以看到 $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" = []]
]

【问题讨论】:

    标签: php arrays reference


    【解决方案1】:

    如果您通过groupid 为您的$groups 数组编制索引,那么您可以使用它来将值添加到正确的分组中。所以在你的循环内部变成......

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

    您可能想在最后删除这些组号,只需使用array_values() 即可...

    $groups = array_values($groups);
    

    【讨论】:

    • 写的是完全一样的东西。
    • 你不是提前一周吗?!
    • 抛开复活节彩蛋谈话(是的,你提前一周了!);-) 那太好了。我专注于不必在循环的每次迭代中查找组,但它非常有意义。谢谢:-)
    猜你喜欢
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多