2015-11-04 96 views
0

我试图通过DESC顺序中的子键的值对数组进行排序,但我卡住了。 我已经能与ksort来,但它是按升序排列..按键的值排序数组

这里是我的数组:

array_by_lang => array(
     [no] => array(
      [3-1] => array(//some informations), 
      [3-10] => array(//informations), 
      [3-7] => array(//informations), 
      [5-1] => array(//informations) 
     ) 
) 

我想获得的是一样的东西:

array_by_lang => array(
     [no] => array(
      [5-1] => array(//informations), 
      [3-10] => array(//some informations), 
      [3-7] => array(//informations), 
      [3-1] => array(//informations) 
     ) 
) 

是这样可能吗?非常感谢

+0

到目前为止,你已经尝试过什么?发布您的尝试。 –

回答

2

我想,你需要 “的关键逆转自然排序”。只是array_multisortarray_reverse(见natsort):

$array_by_lang = array(
     'no' => array(
      '3-1' => array('info_1'), 
      '3-10' => array('info_2'), 
      '3-7' => array('info_3'), 
      '5-1' => array('info_4'), 
     ) 
    ); 


    array_multisort(array_keys($array_by_lang['no']),SORT_NATURAL, $array_by_lang['no']); 
    $array_by_lang['no'] = array_reverse($array_by_lang['no']); // reverse natural order - "DESC" 
    var_dump($array_by_lang); 

输出

array(1) { 
    ["no"]=> 
    array(4) { 
    ["5-1"]=> 
     array(1) { 
     [0]=> 
     string(6) "info_4" 
    } 
    ["3-10"]=> 
     array(1) { 
     [0]=> 
     string(6) "info_2" 
    } 
    ["3-7"]=> 
     array(1) { 
     [0]=> 
     string(6) "info_3" 
    } 
    ["3-1"]=> 
     array(1) { 
     [0]=> 
     string(6) "info_1" 
    } 
    } 
}  
+0

哇,简单&干净!工作得很好!但是现在我知道,掌握所有简单功能的道路是漫长的。 – skytorner

1

这可能帮助 -

$a = array(
'3-1' => array('//some informations'), 
'3-10' => array('//informations'), 
'3-7' => array('//informations'), 
'5-1' => array('//informations') 
); 

## Array for keys 
$temp= array(); 
foreach(array_keys($a) as $v) { 
    $t = explode('-', $v); 
    $temp[$t[0]][] = $t[1]; 
} 

## Sort the keys 
foreach($temp as &$ar) { 
    rsort($ar); 
} 
krsort($temp); 

## Final array 
$final= array(); 
foreach($temp as $k => $f) { 
    foreach($f as $v) { 
     $key = $k . '-' . $v; 
     $final[$key] = $a[$key]; 
    } 
} 

var_dump($final); 

输出

array(4) { 
    ["5-1"]=> 
    array(1) { 
    [0]=> 
    string(14) "//informations" 
    } 
    ["3-10"]=> 
    array(1) { 
    [0]=> 
    string(14) "//informations" 
    } 
    ["3-7"]=> 
    array(1) { 
    [0]=> 
    string(14) "//informations" 
    } 
    ["3-1"]=> 
    array(1) { 
    [0]=> 
    string(19) "//some informations" 
    } 
} 

DEMO

+0

我也试过这个,它的工作,但@ voodoo417解决方案是非常简单的添加到我的代码 – skytorner

+0

是的。这很简单。 –