2013-02-14 2 views
0

Я просмотрел все ответы на вопрос о сортировке многомерных массивов в PHP на Stack Overflow, но никто не ответил на мой вопрос.Расширенная сортировка многомерного массива в PHP

Из различных ответов я понял, что я должен использовать либо функцию PHP usort или функцию PHP array_multisort, но я не знаю, как применить их к моей весьма специфической структуре массива:

Вот мой переменная $array:

Array 
(
    [0] => Array 
     (
      [field1] => 10 
      [field2] => 100 
      [field3] => 100 
      [subarray] => Array 
       (
        [0] => Array 
         (
          [field1] => 10 
          [field2] => 100 
          [field3] => 100 
         ) 

        [1] => Array 
         (
          [field1] => 10 
          [field2] => 100 
          [field3] => abcORDERBYTHIS 
         ) 

       ) 

     ) 

    [1] => Array 
     (
      [field1] => 10 
      [field2] => 100 
      [field3] => 100 
      [subarray] => Array 
       (
        [0] => Array 
         (
          [field1] => 10 
          [field2] => 100 
          [field3] => 100 
         ) 

        [1] => Array 
         (
          [field1] => 10 
          [field2] => 100 
          [field3] => ghiORDERBYTHIS 
         ) 

       ) 

     ) 

    [2] => Array 
     (
      [field1] => 10 
      [field2] => 100 
      [field3] => 100 
      [subarray] => Array 
       (
        [0] => Array 
         (
          [field1] => 10 
          [field2] => 100 
          [field3] => 100 
         ) 

        [1] => Array 
         (
          [field1] => 10 
          [field2] => 100 
          [field3] => defORDERBYTHIS 
         ) 

       ) 

     ) 

) 

Я хотел бы иметь возможность отсортировать этот массив по field3 массиву в последнего в subarray. Доступ к этому элементу достаточно легко с PHP end функции следующим образом:

<?php 
foreach($array as $array_single){ 
    foreach(end($array_single['subarray']) as $sub_array){ 
     echo $sub_array; 
    } 
} 
?> 

И теперь я застрял в том, как конкретно разобраться в этом многомерный массив в алфавитном порядке, так что мы получаем следующий результат:

  • $array[0] - Остатки на вершине, потому что значение field3 является abcORDERBYTHIS
  • $array[2] - Прыгает в середине, так как значение field3 является defORDERBYTHIS
  • $array[1] - теперь на дне, потому что значение field3 является ghiORDERBYTHIS

Заранее спасибо!

+0

Такие передовые сортировки массива часто DIY. –

+0

Ouch @JasonMcCreary - не то, что я хочу услышать! ;) –

+0

Извините. Хотя PHP более 100 функций массива, нет серебряной пули. Это не означает, что комбинация может не предоставить вам то, что вы хотите. –

ответ

1

Попробуйте этот код:

$array = Array(); 

$arraytemp['field1'] = 10; 
$arraytemp['field2'] = 100; 
$arraytemp['field3'] = 100; 
$arraytemp['subarray'][0]["field1"] = 10; 
$arraytemp['subarray'][0]["field2"] = 100; 
$arraytemp['subarray'][0]["field3"] = 100; 
$arraytemp['subarray'][1]["field1"] = 10; 
$arraytemp['subarray'][1]["field2"] = 100; 
$arraytemp['subarray'][1]["field3"] = "abcORDERBYTHIS"; 

$array[] = $arraytemp; 

$arraytemp['field1'] = 10; 
$arraytemp['field2'] = 100; 
$arraytemp['field3'] = 100; 
$arraytemp['subarray'][0]["field1"] = 10; 
$arraytemp['subarray'][0]["field2"] = 100; 
$arraytemp['subarray'][0]["field3"] = 100; 
$arraytemp['subarray'][1]["field1"] = 10; 
$arraytemp['subarray'][1]["field2"] = 100; 
$arraytemp['subarray'][1]["field3"] = "ghiORDERBYTHIS"; 

$array[] = $arraytemp; 

$arraytemp['field1'] = 10; 
$arraytemp['field2'] = 100; 
$arraytemp['field3'] = 100; 
$arraytemp['subarray'][0]["field1"] = 10; 
$arraytemp['subarray'][0]["field2"] = 100; 
$arraytemp['subarray'][0]["field3"] = 100; 
$arraytemp['subarray'][1]["field1"] = 10; 
$arraytemp['subarray'][1]["field2"] = 100; 
$arraytemp['subarray'][1]["field3"] = "defORDERBYTHIS"; 

$array[] = $arraytemp; 

// Sort the multidimensional array 
usort($array, "custom_sort"); 

// Define the custom sort function used in usort 
function custom_sort($a,$b) { 
    return strcmp($a['subarray'][1]["field3"], $b['subarray'][1]["field3"]); 
} 
+0

Спасибо Фабио! Это работает отлично, как ожидалось. Я отмечаю это как правильный ответ. Спасибо за быстрый ответ !!! –

Смежные вопросы