2015-12-06 1 views
0

у меня есть многомерный массив, подобный этому (небольшое подмножество):PHP Сортировать многомерный массив первого по массиву порядка и второго по возрастанию значений

малого подмножества:

$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 
       ) 
     ) 
) 
+0

Hi. что ты уже испробовал? – wwkudu

ответ

0

Я в конечном итоге создать еще один элемент в массиве (sales_class_order), который устраняется необходимость в произвольном порядке ($ order_array). Затем я использовал array_multisort в сочетании с array_combine для восстановления моих ключей. Добавленный элемент разрешен для SORT_ASC в array_multisort.

$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); 
Смежные вопросы