ksort многомерный массив с двумя числовыми ключами

Я ожидал этого:

$f[14][5] = array('');
$f[13][1] = array('');
$f[13][3] = array('');
$f[13][2] = array('');
$f[14][1] = array('');
$f[13][2] = array('');
$f[14][2] = array('');
$f[14][4] = array('');
$f[14][3] = array(''); 
$f[13][4] = array('');
$f[13][5] = array('');


krsort($f);
echo '<pre>';
print_r($f); 

сортировать как

14 5, 
14 4, 
14 3, 
14 2,
14 1, 
13 5, 
13 4, 
13 3, 
13 2,
13 1

но это не так. Почему-то второй ключ не отсортирован.

Каков самый элегантный короткий способ добиться этого?

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

Спасибо


person Webconstructor    schedule 22.05.2014    source источник


Ответы (1)


Просто попробуйте с krsort, который сортирует по ключам в обратном порядке. Вы также должны перебрать подмассивы, чтобы отсортировать их, потому что эта функция не работает с многомерными массивами.

krsort($f);
foreach ($f as &$v) {
    krsort($v);
}

Выход:

array (size=2)
  14 => 
    array (size=5)
      5 => 
        array (size=1)
          0 => string '' (length=0)
      4 => 
        array (size=1)
          0 => string '' (length=0)
      3 => 
        array (size=1)
          0 => string '' (length=0)
      2 => 
        array (size=1)
          0 => string '' (length=0)
      1 => 
        array (size=1)
          0 => string '' (length=0)
  13 => &
    array (size=5)
      5 => 
        array (size=1)
          0 => string '' (length=0)
      4 => 
        array (size=1)
          0 => string '' (length=0)
      3 => 
        array (size=1)
          0 => string '' (length=0)
      2 => 
        array (size=1)
          0 => string '' (length=0)
      1 => 
        array (size=1)
          0 => string '' (length=0)
person hsz    schedule 22.05.2014