使用两个条件自定义排序数组数组

Wer*_*eta 7 php sorting multidimensional-array

我有以下数组:

$arr = [
    [
        'user_id' => 1,
        'product_id' => 1
    ],
    [
        'user_id' => 1,
        'product_id' => 2
    ],
    [
        'user_id' => 1,
        'product_id' => 3
    ],
    [
        'user_id' => 2,
        'product_id' => 1
    ],
    [
        'user_id' => 2,
        'product_id' => 2
    ],
    [
        'user_id' => 3,
        'product_id' => 1
    ]
];
Run Code Online (Sandbox Code Playgroud)

我想对它进行排序,看起来像这样:

$arr = [
    [
        'user_id' => 1,
        'product_id' => 1
    ],
    [
        'user_id' => 2,
        'product_id' => 1
    ],
    [
        'user_id' => 3,
        'product_id' => 1
    ],
    [
        'user_id' => 1,
        'product_id' => 2
    ],
    [
        'user_id' => 2,
        'product_id' => 2
    ],
    [
        'user_id' => 1,
        'product_id' => 3
    ]
];
Run Code Online (Sandbox Code Playgroud)

所以基本上我需要订购product_id,并user_id在它选择较低的数量这样的方式product_id进行下一个之前从每个用户.

我尝试使用,usort但我无法让它工作.

usort($campaigns, function($a, $b){
    if($a['product_id'] == $b['product_id']){
        return 0;
    }

    if($a['product_id'] < $b['product_id']){

        if($a['user_id'] == $b['user_id']){
            return 1;
        }

        if($a['user_id'] < $a['user_id']){
            return 0;
        }

        return -1;
    }else{

        if($a['user_id'] == $a['user_id']){
            return -1;
        }

        if($a['user_id'] < $a['user_id']){
            return 0;
        }

        return 1;
    }
});
Run Code Online (Sandbox Code Playgroud)

我也试过,array_multisort但我能做到的就是使用我已从数据库中检索的相同订单进行订购.

vp_*_*rth 3

假设你的值是整数:

usort($campaigns, function($a, $b){
    if($a['product_id'] == $b['product_id']){
        return $a['user_id'] - $b['user_id'];
    } else {
        return $a['product_id'] - $b['product_id'];
    }
});
Run Code Online (Sandbox Code Playgroud)

您还可以使用带有ORDER BY product_id, user_id子句的数据库排序。