首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化多维数组的重排序和去重

优化多维数组的重排序和去重
EN

Stack Overflow用户
提问于 2011-05-03 20:32:14
回答 1查看 194关注 0票数 1

我想知道是否有人对优化下面的代码有什么好主意。我有一个多维数组($List),如下所示:

代码语言:javascript
复制
Array
(
    [0] => Array
    (
        [id] => 1
        [title] => A good read
        [priority] => 10
    )

    [1] => Array
    (
        [id] => 2
        [title] => A bad read
        [priority] => 20

    )

    [2] => Array
    (
        [id] => 3
        [title] => A good read
        [priority] => 10
    )
)

首先,我删除所有共享相同标题的条目(不管其他值是什么),如下所示:

代码语言:javascript
复制
$List_new = array();
foreach ($List as $val) {
    $List_new[$val['title']] = $val;    
}
$List = array_values($List_new);

太完美了。然后我重新排序数组,首先是按优先级字段,然后是id:

代码语言:javascript
复制
$sort_id = array();
$sort_priority = array();
foreach ($List as $key => $row) {
    $sort_id[$key] = $row['id'];
    $sort_priority[$key] = $row['priority'];
}
array_multisort($sort_priority, SORT_DESC, $sort_id, SORT_DESC, $List);

两个代码块都出现在一个循环中,因此在重新排序之前要清除$sort_id和$sort_priority。

有没有更好的方法来做到这一点-例如,使用排序过程来删除重复的标题条目?这个代码块是在一个包含多达500,000条记录的循环中执行的,因此欢迎任何改进!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-03 23:13:51

一个循环,但有几个额外的函数调用,所以我不能告诉你大O是如何变化的。需要注意的一点是,数字周围的填充必须足够大,以防止溢出,即2=最大99优先级,6=最大999,999项。

代码语言:javascript
复制
$list_titles = array();
foreach($List as $val) {
    if(isset($list_titles[$val['title']])) continue;
    $list_titles[$val['title']] = true;
    $List_new[str_pad($val['priority'], 2, 0, STR_PAD_LEFT).str_pad($val['id'], 6, 0, STR_PAD_LEFT)] = $val;
}
krsort($List_new);

编辑:做了一些小的修改。

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

https://stackoverflow.com/questions/5869477

复制
相关文章

相似问题

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