phparrayssortingmultidimensional-arrayksort

Sort elements in each row of a 2d array by 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 multidim array: prioritize if column contains substring, then order by a second column but I cannot find a way to target the second key)


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)