PHP首先按顺序数组对多维数组进行排序,然后按升序对其进行排序


PHP Sort Multidimensional Array first by Order Array and Second by Ascending Values

我有一个类似的多维数组(小子集):

小型子集:

$array[123][2501]['sales_class'] = '2';
$array[123][2501]['option_order'] = '11';
$array[124][2487]['sales_class'] = '2';
$array[124][2487]['option_order'] = '13';
$array[3][2]['sales_class'] = '1';
$array[3][2]['option_order'] = '3';
$array[6][1092]['sales_class'] = '1';
$array[6][1092]['option_order'] = '1';
$array[3][2]['sales_class'] = '1';
$array[3][2]['option_order'] = '3';
$array[21][2296]['sales_class'] = '4';
$array[21][2296]['option_order'] = '1';
$array[111][1447]['sales_class'] = '4';
$array[111][1447]['option_order'] = '2';

更现实:

$new_array[1][2422]['sales_class'] = '1';
$new_array[1][2422]['option_order'] = '0';
$new_array[2][1908]['sales_class'] = '1';
$new_array[2][1908]['option_order'] = '4';
$new_array[3][2]['sales_class'] = '1';
$new_array[3][2]['option_order'] = '3';
$new_array[4][5]['sales_class'] = '1';
$new_array[4][5]['option_order'] = '2';
$new_array[5][2436]['sales_class'] = '1';
$new_array[5][2436]['option_order'] = '5';
$new_array[6][1092]['sales_class'] = '1';
$new_array[6][1092]['option_order'] = '1';
$new_array[7][7]['sales_class'] = '2';
$new_array[7][7]['option_order'] = '2';
$new_array[8][11]['sales_class'] = '2';
$new_array[8][11]['option_order'] = '3';
$new_array[21][2296]['sales_class'] = '4';
$new_array[21][2296]['option_order'] = '1';
$new_array[27][2434]['sales_class'] = '13';
$new_array[27][2434]['option_order'] = '0';
$new_array[34][2489]['sales_class'] = '4';
$new_array[34][2489]['option_order'] = '0';
$new_array[47][2055]['sales_class'] = '13';
$new_array[47][2055]['option_order'] = '1';
$new_array[107][1809]['sales_class'] = '2';
$new_array[107][1809]['option_order'] = '7';
$new_array[111][1447]['sales_class'] = '4';
$new_array[111][1447]['option_order'] = '2';
$new_array[112][2446]['sales_class'] = '2';
$new_array[112][2446]['option_order'] = '1';
$new_array[113][2498]['sales_class'] = '2';
$new_array[113][2498]['option_order'] = '4';
$new_array[116][2485]['sales_class'] = '2';
$new_array[116][2485]['option_order'] = '12';
$new_array[118][2472]['sales_class'] = '2';
$new_array[118][2472]['option_order'] = '14';
$new_array[120][2470]['sales_class'] = '2';
$new_array[120][2470]['option_order'] = '9';
$new_array[121][2475]['sales_class'] = '2';
$new_array[121][2475]['option_order'] = '15';
$new_array[122][2476]['sales_class'] = '2';
$new_array[122][2476]['option_order'] = '10';
$new_array[123][2501]['sales_class'] = '2';
$new_array[123][2501]['option_order'] = '11';
$new_array[124][2487]['sales_class'] = '2';
$new_array[124][2487]['option_order'] = '13';
$new_array[126][2509]['sales_class'] = '2';
$new_array[126][2509]['option_order'] = '0';
$new_array[128][2525]['sales_class'] = '2';
$new_array[128][2525]['option_order'] = '6';
$new_array[130][1409]['sales_class'] = '2';
$new_array[130][1409]['option_order'] = '17';
$new_array[162][2548]['sales_class'] = '9';
$new_array[162][2548]['option_order'] = '33';
$new_array[181][2568]['sales_class'] = '2';
$new_array[181][2568]['option_order'] = '5';
$new_array[199][2603]['sales_class'] = '2';
$new_array[199][2603]['option_order'] = '8';

我需要能够首先根据以下动态创建的数组按sales_class进行排序:

$order_array = array(1, 4, 2);

以上更逼真阵列的订单:

$new_order = array(1,13,4,2,14,9,3,15,16);

其次,我需要对option_order进行排序。

得到的排序数组将是(对于小子集):

Array(
    [6] => Array(
            [1092] => Array(
                    [sales_class] => 1
                    [option_order] => 1
                )
        )
    [3] => Array(
            [2] => Array(
                    [sales_class] => 1
                    [option_order] => 3
                )
        )
    [21] => Array(
            [2296] => Array(
                    [sales_class] => 4
                    [option_order] => 1
                )
        )
    [111] => Array(
            [1447] => Array(
                    [sales_class] => 4
                    [option_order] => 2
                )
        )
    [123] => Array(
            [2501] => Array(
                    [sales_class] => 2
                    [option_order] => 11
                )
        )
    [124] => Array(
            [2487] => Array(
                    [sales_class] => 2
                    [option_order] => 13
                )
        )
)

我最终在数组中创建了另一个元素(sales_class_order),这消除了对自定义订单($order_array)的需求。然后我使用array_multsort和array_component组合来恢复我的密钥。在array_multissort中为SORT_ASC添加的元素。

    $keys = array_keys($array);
    foreach($array as $first) {
        foreach($first as $second) {
            $sales_class[] = $second["sales_class_order"];
            $option_order[] = $second["option_order"];
        }
    }
array_multisort($sales_class, SORT_ASC, 
    $option_order, SORT_ASC,
    $array, 
    $keys);
$array = array_combine($keys, $array);