首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按键的值排序数组。

按键的值排序数组。
EN

Stack Overflow用户
提问于 2015-11-04 10:20:42
回答 2查看 68关注 0票数 0

我试图按DESC顺序的子键值对数组进行排序,但我被卡住了。我本来可以用ksort做的,但它是按升序排列的..

这是我的数组:

代码语言:javascript
运行
复制
 array_by_lang => array(
        [no] => array(
             [3-1] => array(//some informations),
             [3-10] => array(//informations),
             [3-7] => array(//informations),
             [5-1] => array(//informations)
        )
 )

我想得到的是:

代码语言:javascript
运行
复制
  array_by_lang => array(
        [no] => array(
             [5-1] => array(//informations),
             [3-10] => array(//some informations),
             [3-7] => array(//informations),
             [3-1] => array(//informations)
        )
 )

这有可能吗?非常感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-04 11:08:06

我认为,你需要“按键逆转自然排序”。只使用多类反转 (也请参阅纳蒂):

代码语言:javascript
运行
复制
    $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);

输出

代码语言:javascript
运行
复制
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"
    }
   }
}       
票数 2
EN

Stack Overflow用户

发布于 2015-11-04 10:41:07

这可能会有帮助-

代码语言:javascript
运行
复制
$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);

输出

代码语言:javascript
运行
复制
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"
  }
}

演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33519263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档