Сортировка многомерных массивов

bit_immo

Guest
Сортировка многомерных массивов

Привет, All!
Встала задача отсортировать много массивов разной размерности по ключам.
Может кто-то решал уже подобную задачу???

Например:
$a[1][1][1][0]=5;
$a[2][2][1][2]=6;
$a[0][2][1][1]=4;
$a[0][0][1][2]=2;
$a[0][0][1][0]=6;
$a[0][0][1][1]=1;
$a[0][1][1][0]=3;

для этого нужно вызвать что-нить вроде этого:
$b=sortMultiArrayByKeys($a, array(SORT_ASC,SORT_ASC,SORT_ASC,SORT_ASC));

на выходе нужно получить вот такое :
$a[0][0][1][0]=6;
$a[0][0][1][1]=1;
$a[0][0][1][2]=2;
$a[0][1][1][0]=3;
$a[0][2][1][1]=4;
$a[1][1][1][0]=5;
$a[2][2][1][2]=6;

тоесть - отсортировать по ключам.
Насколько я знаю - такой ф-ции нет в php.
 

Tor

Новичок
стоп
а как ты получив входной массив и как от отличается от желаемого?
 

bit_immo

Guest
входной массив задан (без сортировки), а отличается - тем что он должен быть в итоге отсортирован.

Я представляю - как сделать рекукрсивно ksort ом , но что то пока не доходит - как сделать - чтобы сортировалось только первые задданые ключи - тоесть из 4 ключей нужно отсортировать например 3 кака asc и последний как desc.
 

bit_immo

Guest
можно конечно для начала попробовать отсортировать все ключи как asc, тоесть ф-цию сделать без параметров SORT_ASC.
 

lucas

Guest
входной массив задан
Вот в том и вопрос: каким таким образом он задан?

Насчет рекурсии: передавай в функцию текущую глубину рекурсии и максимально возможную. И сравнивай.
 

bit_immo

Guest
1. print_r($a);
2. функция сортировки;
3. print_r($b);

последовательность данных в 1 и 3 не будет совпадать.

-~{}~ 21.07.05 14:44:

он так и задан:
$a[1][1][1][0]=5;
$a[2][2][1][2]=6;
$a[0][2][1][1]=4;
$a[0][0][1][2]=2;
$a[0][0][1][0]=6;
$a[0][0][1][1]=1;
$a[0][1][1][0]=3;
 

bit_immo

Guest
если сделать
while (list($key, $val)=each($a)) {

}
то сначало в качестве $key - будет 1, а нужно - 0!
 

bit_immo

Guest
случайно - выбрали какие -то данные из базы.
Не суть важно - просто - у нас каким то образом оказались данные не отсортированны.

-~{}~ 21.07.05 14:51:

нет - там могуть быть и строки:

там что угодно можеть быть в качестве ключей
 

lucas

Guest
Очень даже важно:
1. Если это нужно из спортивного интереса -- тебе уже все рассказали.
2. Если нет -- это должно иметь более "красивое" решение, чем сортировка непонятного массива.
 

bit_immo

Guest
похоже что как то так оно выглядет (вроде работает):

function sortMultiArrayByKeys(&$array, $f1, $f2) {
ksort($array);
$f1++;
while ($every=@each($array)) {
if ($f1!=$f2) {
sortMultiArrayByKeys($array[$every['key']], $f1, $f2);
}
}
}

-~{}~ 21.07.05 15:08:

Автор оригинала: Screjet
В юзер-нотайсах ksort есть готовая ф-ция
Это где?
 

Screjet

Новичок
PHP:
function tksort(&$array)
 {
 ksort($array);
 foreach(array_keys($array) as $k)
   {
   if(gettype($array[$k])=="array")
     {
     tksort($array[$k]);
     }
   }
 }
 
Сверху