Php 按列值对数据行进行分组,并重新构造为关联多维数组

Php 按列值对数据行进行分组,并重新构造为关联多维数组,php,arrays,multidimensional-array,grouping,associative-array,Php,Arrays,Multidimensional Array,Grouping,Associative Array,我正在尝试将索引数组更改为新的数组结构。我的数据如下: $arr = array( array( "year" => 1921, "name" => "bob" ), array( "year" => 1944, "name" => "steve" ), array( "year" => 1944

我正在尝试将索引数组更改为新的数组结构。我的数据如下:

$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 "} 
        ]
    }

您不需要预先提取唯一年份,也不需要在嵌套循环中使用条件。只需使用临时第一级键将数据推入结果集中,然后在完成循环时删除临时键

这确保了年份的唯一性,但允许重复名称

代码:()

输出:

{
    "data": [
        {
            "year": 1921,
            "names": [
                {
                    "name": "bob"
                },
                {
                    "name": "jim"
                }
            ]
        },
        {
            "year": 1944,
            "names": [
                {
                    "name": "steve"
                },
                {
                    "name": "doug"
                }
            ]
        }
    ]
}

你是对的,虽然另一种方法把我带到了正确的方向,我能够让它工作,但在我看来,这是一个更好的解决方案。很抱歉,这个问题似乎是一个“需求转储”。请始终发布您的最佳自我解决失败尝试,以便社区了解您没有犯下“帮助吸血鬼”的错误。通过显示错误代码,我们通常可以避免从头开始编写完整的脚本,而只需找出代码中出错的部分。(添加您辛苦工作的证明也有助于防止downV的出现)如果您确实编写了一些代码,那么将其添加到您的问题中作为一个例子永远不会太迟。@wuzz当您删除它时,我正在开发一个完整的示例来回答。“你能不能取消删除它,这样我就可以分享我的答案了?”比尔·卡温取消删除
{
    "data": [
        {
            "year": 1921,
            "names": [
                {
                    "name": "bob"
                },
                {
                    "name": "jim"
                }
            ]
        },
        {
            "year": 1944,
            "names": [
                {
                    "name": "steve"
                },
                {
                    "name": "doug"
                }
            ]
        }
    ]
}