排序多维内数组 PHP

Sort multi-dimentional inner array PHP

提问人:Red Devil 提问时间:4/14/2022 最后编辑:Red Devil 更新时间:4/16/2022 访问量:27

问:

我一直在尝试对多维内部数组进行排序,我尝试了 array_multisort() 方法,但在我的情况下不起作用。

$array = [
        [
            'sizes'=>[
                [
                    'weight'=>25,
                    'height'=>110
                ], [
                    'weight'=>45,
                    'height'=>110
                ],

            ]
        ],
        [
            'sizes'=>[
                [
                    'weight'=>80,
                    'height'=>120
                ],[
                    'weight'=>20,
                    'height'=>120
                ]
                ]

        ]
    ];

我需要根据权重对上述数组进行排序,如果按最高权重排序,则数组应返回具有最高权重的尺寸块,反之亦然。在这种情况下,“权重”:80 是最高的,如果按最低的第 1 个“权重”排序:20 应该是第一位。

排序后的预期输出 SORT_ASC 和 SORT_DESC

 $array = [
        [
            'sizes'=>[
                [
                    'weight'=>80,
                    'height'=>120
                ],[
                    'weight'=>20,
                    'height'=>120
                ]
                ]

        ],
        [
            'sizes'=>[
                [
                    'weight'=>25,
                    'height'=>110
                ], [
                    'weight'=>45,
                    'height'=>110
                ],

                ]
            ]
    ];
PHP 多维数组 usort

评论

2赞 Michal Hynčica 4/14/2022
您可以创建辅助函数,该函数将遍历“sizes”子数组并找到最大(或最小)权重。然后使用 usort 回调中的 helper 函数来比较这两个值。
0赞 Red Devil 4/14/2022
@MichalHynčica你能给我一个示例代码吗?

答:

1赞 CBroe 4/14/2022 #1

您可以使用从子数组中提取权重值,然后使用这些值,然后使用比较运算符来比较这两个最大值:array_columnmax<=>

usort($array, function($a, $b) {
    return max(array_column($b['sizes'], 'weight')) <=>
           max(array_column($a['sizes'], 'weight'));
});

这是降序,升序是$a,$b,乘以 -1。