PHP:按索引值进行数组分离


PHP: Array Segregation By Index Value

我有一个这样的数组:

[
        {
          "id": "13216",
          "image_type": "ThumbnailImage",
          "is_primary": "1"
        },
        {
          "id": "13217",
          "image_type": "MediumImage",
          "is_primary": "1"
        },
        {
          "id": "13218",
          "image_type": "LargeImage",
          "is_primary": "1"
        },
        {
          "id": "13219",
          "image_type": "ThumbnailImage",
          "is_primary": "0"
        },
        {
          "id": "13220",
          "image_type": "MediumImage",
          "is_primary": "0"
        },
        {
          "id": "13221",
          "image_type": "LargeImage",
          "is_primary": "0"
        }
]

我想把这个转换成这个:

[
    "ThumbnailImage" => [
            {
                "id": "13216",
                "image_type": "ThumbnailImage",
                "is_primary": "1"
            },
            {
                "id": "13219",
                "image_type": "ThumbnailImage",
                "is_primary": "0"
            },
        ],
        "MediumImage" => [
            {
                "id": "13217",
                "image_type": "MediumImage",
                "is_primary": "1"
            },
            {
                "id": "13220",
                "image_type": "MediumImage",
                "is_primary": "0"
            },
        ],
        "LargeImage" => [
            {
                "id": "13218",
                "image_type": "LargeImage",
                "is_primary": "1"
            }, 
            {
                "id": "13221",
                "image_type": "LargeImage",
                "is_primary": "0"
            }
        ]
]

我正在寻找一种动态解决方案,在该解决方案中,我可以指定密钥名称,它会根据索引的值自动隔离数组。例如,在这种情况下,如果我指定索引名称image_type,它应该给我提到的输出,如果我指定is_primary,它应该返回索引0和1及其值。

最终解决方案:

public function segregateByIndex($array, $segregateKey)
{
        $result = [];
        foreach( $array as $val ) {
            $result[$val[$segregateKey]][] = $val;
        }
        return $result;
}

使用foreach作为很容易解决

$result = [];
foreach(json_decode($your_json,true) as $key => $val){
    $result[$val['image_type']][] = $val;
}
print_r($result);