我试图通过以下两种方式对数组元素进行排序:
按密钥长度排序我使用:
function sortByLength($a,$b){
if($a == $b) return 0;
return (strlen($a) < strlen($b) ? -1 : 1);
}
uasort($deals_tag,'sortByLength');
数组以这种方式排序:
Array
(
[/merchantProductFeed] => 1
[/merchantProductFeed/merchant] => 1
[/merchantProductFeed/merchant/prod/text] => 158
[/merchantProductFeed/merchant/prod] => 158
)
我希望它像这样排序:
Array
(
[/merchantProductFeed/merchant/prod] => 158
[/merchantProductFeed/merchant/prod/text] => 158
[/merchantProductFeed] => 1
[/merchantProductFeed/merchant] => 1
)
请注意,首先按键长度排序数组,然后按最大值排序。
我不知道该怎么做。
任何帮助都将受到高度赞赏!谢谢!
答案 0 :(得分:1)
已更新:您可以使用array_mulitsort。尝试
$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 :(得分:1)
我知道它可能有点开销,但是通过使用(临时)数据库进行排序的另一种方法是,如果我需要一些“硬核”排序,我会亲自使用它,所以这里是......
<?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),如果它更长,你应该使用TEXT。