首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php顺序数组有两种方式

php顺序数组有两种方式
EN

Stack Overflow用户
提问于 2012-07-29 05:17:16
回答 2查看 139关注 0票数 2

我试图通过以下两种方式对数组的元素排序:

  • 按键长排序(最小应优先)- 看这里
  • 最大值应优先考虑

要按键长排序,我使用以下命令:

代码语言:javascript
复制
    function sortByLength($a,$b){
      if($a == $b) return 0;
      return (strlen($a) < strlen($b) ? -1 : 1);
    }

    uasort($deals_tag,'sortByLength');

数组按这种方式排序:

代码语言:javascript
复制
Array
(
 [/merchantProductFeed] => 1
 [/merchantProductFeed/merchant] => 1
 [/merchantProductFeed/merchant/prod/text] => 158
 [/merchantProductFeed/merchant/prod] => 158
)

我想要像这样分类:

代码语言:javascript
复制
Array
(
 [/merchantProductFeed/merchant/prod] => 158
 [/merchantProductFeed/merchant/prod/text] => 158
 [/merchantProductFeed] => 1
 [/merchantProductFeed/merchant] => 1
)

注意,数组首先按键长排序,然后按最大值排序。

我不知道该怎么做。

任何帮助都将不胜感激!谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-29 05:24:01

更新:您可以使用多数派。试一试

代码语言:javascript
复制
$k= array();
$v = array();

foreach($deals_tag as $key => $value){
    $k[] = $key;
    $v[] = $value;
}

array_multisort($v, SORT_DESC, $k, SORT_ASC,  $deals_tag);
票数 1
EN

Stack Overflow用户

发布于 2012-07-29 05:52:38

我知道这可能有点开销,但另一种分类方法是使用(临时) DB,如果我需要一些“硬核”排序,那么它就是.

代码语言:javascript
复制
<?php
$p = new PDO("sqlite::memory:");
$p->exec("CREATE TABLE a (k varchar(255),v int)");

$p->exec("INSERT INTO a (k,v) VALUES('/merchantProductFeed',1)");
$p->exec("INSERT INTO a (k,v) VALUES('/merchantProductFeed/merchant',1)");
$p->exec("INSERT INTO a (k,v) VALUES('/merchantProductFeed/merchant/prod/text',158)");
$p->exec("INSERT INTO a (k,v) VALUES('/merchantProductFeed/merchant/prod',158)");

$st=$p->query("SELECT * FROM a ORDER BY length(k) DESC,v DESC");
print_r($st->fetchAll());
?>

我不知道您的字符串有多长,在这个示例中,我使用varchar(255),如果它更长,您应该使用文本。

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

https://stackoverflow.com/questions/11706873

复制
相关文章

相似问题

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