按列值对数据行进行分组并重组为关联的多维数组
Group rows of data by a column value and restructure into an associative multi-dimensionsl array
我正在尝试将数组的索引数组更改为新的数组结构。我的数据如下:
$arr = array(
array( "year" => 1921, "name" => "bob" ),
array( "year" => 1944, "name" => "steve" ),
array( "year" => 1944, "name" => "doug" ),
array( "year" => 1921, "name" => "jim" ),
);
我想重新创建一个将它们分组到同一年的新数组。我能想到的最好方法是将年份指定为键,这样任何包含该年份的行都会添加到该键,但这不是我要查找的输出。我需要的是下面列出的方式。
"data": [
{
"year":"1921",
"names": [
{ "name":"bob" }, { "name":"jim"}
]
},
{
"year":1944",
"names": [
{ "name":"steve" }, { "name":"doug "}
]
}
您不需要 pre-extract 唯一年份,也不需要在嵌套循环中使用条件。 只需使用临时 [=24= 将数据推入结果集中] 键,然后在完成循环后删除临时键。
这确保了唯一的年份,但允许重复名称。
代码:(Demo)
$arr = [
["year" => 1921, "name" => "bob"],
["year" => 1944, "name" => "steve"],
["year" => 1944, "name" => "doug"],
["year" => 1921, "name" => "jim"],
];
foreach ($arr as $item) {
$result[$item['year']]['year'] = $item['year'];
$result[$item['year']]['names'][] = ['name' => $item['name']];
}
echo json_encode(
['data' => array_values($result)],
JSON_PRETTY_PRINT // for better visualization
);
输出:
{
"data": [
{
"year": 1921,
"names": [
{
"name": "bob"
},
{
"name": "jim"
}
]
},
{
"year": 1944,
"names": [
{
"name": "steve"
},
{
"name": "doug"
}
]
}
]
}
我正在尝试将数组的索引数组更改为新的数组结构。我的数据如下:
$arr = array(
array( "year" => 1921, "name" => "bob" ),
array( "year" => 1944, "name" => "steve" ),
array( "year" => 1944, "name" => "doug" ),
array( "year" => 1921, "name" => "jim" ),
);
我想重新创建一个将它们分组到同一年的新数组。我能想到的最好方法是将年份指定为键,这样任何包含该年份的行都会添加到该键,但这不是我要查找的输出。我需要的是下面列出的方式。
"data": [
{
"year":"1921",
"names": [
{ "name":"bob" }, { "name":"jim"}
]
},
{
"year":1944",
"names": [
{ "name":"steve" }, { "name":"doug "}
]
}
您不需要 pre-extract 唯一年份,也不需要在嵌套循环中使用条件。 只需使用临时 [=24= 将数据推入结果集中] 键,然后在完成循环后删除临时键。
这确保了唯一的年份,但允许重复名称。
代码:(Demo)
$arr = [
["year" => 1921, "name" => "bob"],
["year" => 1944, "name" => "steve"],
["year" => 1944, "name" => "doug"],
["year" => 1921, "name" => "jim"],
];
foreach ($arr as $item) {
$result[$item['year']]['year'] = $item['year'];
$result[$item['year']]['names'][] = ['name' => $item['name']];
}
echo json_encode(
['data' => array_values($result)],
JSON_PRETTY_PRINT // for better visualization
);
输出:
{
"data": [
{
"year": 1921,
"names": [
{
"name": "bob"
},
{
"name": "jim"
}
]
},
{
"year": 1944,
"names": [
{
"name": "steve"
},
{
"name": "doug"
}
]
}
]
}