arrayssortingmultidimensional-arrayksort

ksort a multidimensional array with two numeric keys


I expected this:

$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); 

to sort like

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

but it doesn't. Somehow the second key is not sorted.

What is the most elegant short way to achieve this?

(investigated usort in a manner like for instance in Sorting multidimensional array in PHP but I cannot find a way to target the second key)

thx


Solution

  • Just try with krsort which sorts by keys in reversed order. You have also to loop over subarrays to sort them too because this function does not work on multidimentional arrays.

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

    Output:

    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)