самый эффективный способ упорядочить массив подэлементами? - PullRequest
1 голос
/ 11 сентября 2010

У меня есть многомерный массив.

$array[0] = array(1, 8, 2);    
$array[1] = array(5, 6, 15);
$array[2] = array(-8, 2, 1025);

Мне интересно, какой самый эффективный способ упорядочить родительский массив по определенному свойству его подмассива.Например, я хочу поместить их в порядке возрастания $ sub_array [1], поэтому родительский массив будет иметь порядок 2,1,0.

Ответы [ 2 ]

2 голосов
/ 11 сентября 2010

sort и его двоюродные братья имеют варианты, в которых вы можете предоставить собственную функцию обратного вызова сортировки: usort, uasort (которая поддерживает индексы) и uksort (который сортирует по ключам. Вам придется создать свой собственный обратный вызов сортировки, чтобы сделать то, что вы хотите сделать здесь.

function sort_by_subarray($a, $b)
{
  // $a and $b are elements of $array that are being compared against
  // each other to be sorted

  if (!isset($a[1]) || !isset($b[1]))
  {
    // Do something if $a[1] or $b[1] is undefined
    // Your question doesn't define what the behaviour here should be
  }
  else
  {
    if ($a[1] == $b[1]) return 0;     // the elements are the same
    return ($a[1] < $b[1]) ? -1 : 1;  // otherwise, sort from lowest to highest
  }
}

$array = array(
  array(1, 8, 2),
  array(5, 6, 15),
  array(-8, 2, 1025)
);
uasort($array, "sort_by_subarray");

/* Results in:
Array
(
    [2] => Array
        (
            [0] => -8
            [1] => 2
            [2] => 1025
        )

    [1] => Array
        (
            [0] => 5
            [1] => 6
            [2] => 15
        )

    [0] => Array
        (
            [0] => 1
            [1] => 8
            [2] => 2
        )

)
*/

Обратите внимание, что мойФункция сортирует два подмассива как равные, если $ subarray [1] равен, поэтому, если вы хотите быть более конкретным, вы можете добавить больше правил, когда $a[1] == $b[1].

2 голосов
/ 11 сентября 2010

Используйте http://www.php.net/manual/en/function.usort.php и напишите функцию обратного вызова, которая реализует требуемое условие сортировки.

...