Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 添加到阵列中的阵列(构建数据组)_Php_Arrays_Reference - Fatal编程技术网

Php 添加到阵列中的阵列(构建数据组)

Php 添加到阵列中的阵列(构建数据组),php,arrays,reference,Php,Arrays,Reference,在PHP中,我将循环数据库中的结果,并将结果分组到各个部分,因此我有以下代码 $query = $db->prepare('select groupid, myval1, myval2 from mytable'); $query->execute(); $query->bind_result($groupid, $myval1, $myval2); $groups = []; $currentgroup = null; while ($query->fetch()) {

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

$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" = []]
]

如果通过
groupid
$groups
数组编制了索引,则可以使用该索引将值添加到正确的分组中。所以在你的循环里变成

if ( !isset($groups[$groupid]) ) {
    $groups[$groupid] = ["groupid" => $groupid, "values" => []];
}
$groups[$groupid]["values"][] = ["myval1" => $myval1, "myval2" => $myval2];
您可能希望在末尾删除这些组号,只需使用
array\u values()
即可

$groups = array_values($groups);

如果通过
groupid
$groups
数组编制了索引,则可以使用该索引将值添加到正确的分组中。所以在你的循环里变成

if ( !isset($groups[$groupid]) ) {
    $groups[$groupid] = ["groupid" => $groupid, "values" => []];
}
$groups[$groupid]["values"][] = ["myval1" => $myval1, "myval2" => $myval2];
您可能希望在末尾删除这些组号,只需使用
array\u values()
即可

$groups = array_values($groups);

写了同样的东西。你不是提前一周吗?!把复活节彩蛋的对话放在一边(是的,你提前了一周!);-)太好了。我专注于不必在循环的每次迭代中查找组,但这非常有意义。谢谢:-)我写的都是一样的东西。你不是提前一周吗?!把复活节彩蛋的对话放在一边(是的,你提前了一周!);-)太好了。我专注于不必在循环的每次迭代中查找组,但这非常有意义。谢谢:-)