首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP多维排序?

PHP多维排序?
EN

Stack Overflow用户
提问于 2013-09-15 12:57:19
回答 1查看 71关注 0票数 2

我有一个非常烦人的数组结构要处理,我需要按任意键组合对其进行排序。2记录显示在下面,但有或没有相同结构的多个记录将出现在活动排序时。

这是两张唱片。

代码语言:javascript
复制
Array(

    [0] => Array
    (
        [cid] => 1
        [title] => Mr
        [first_name] => Abet
        [last_name] => Simbad
        [emails] => Array
        (
            [374] => Array
            (
                [eid] => 374
                [name] => ski lodge
                [email] => simbad@skifree.com
            )

            [373] => Array
            (
                [eid] => 373
                [name] => work
                [email] => simbad@work.com
            )

            [375] => Array
            (
                [eid] => 375
                [name] => personal
                [email] => simbad@gmail.com
            )
        )
    )
    [1] => Array
    (
        [cid] => 2
        [title] => Mrs
        [first_name] => Angie
        [last_name] => Stokes
        [emails] => Array
        (
            [590] => Array
            (
                [eid] => 590
                [name] => work
                [email] => angie@gmail.com
            )
        )
    )

因此,如果我想按照emailemails数组中的升序排序,如何才能在结果数组中获得第二条完整记录?angie@gmail.com出现在simbad之前。

另外,一些记录将不包含电子邮件数组。他们将是结果集中的最后一位。任何帮助都将不胜感激。

数组显示是一个削减版本,但我有地址,笔记,电话和网站在相同的烦人的结构。理想情况下,我可以做一些类似的事情

代码语言:javascript
复制
$sort = array('emails','email')
$data = sort_data_func('ASC',$sort,$data);

但任何朝着正确方向前进的步骤都会有所帮助。:)

到目前为止,我有一些代码

代码语言:javascript
复制
$sort = array('emails','email');
foreach($contacts as $ckey => $c){
    if(is_array($c[$sort[0]])){
        foreach($c[$sort[0]] as $key1 => $sort0){
            if($sort0[$sort[1]]!=''){
                $res[$sort[0]][$ckey][$sort[1]][] = $sort0[$sort[1]];
            }
        }
    }
}
print_r($res);

它产生:

代码语言:javascript
复制
Array
(
    [emails] => Array
    (
        [0] => Array
        (
            [0] => simbad@skifree.com
            [1] => simbad@work.com
            [2] => simbad@gmail.com
        )
        [1] => Array
        (
            [0] => angie@gmail.com
        )
    )
)

但我不知道从这里往哪里走。

编辑 OK --我现在已经将记录按currect顺序排列--但是如何在结果数组中保留初始记录ID?我用的是这个。

代码语言:javascript
复制
$direction=='ASC'

function cmp_asc($a, $b){
    $key = current(array_keys($a));
    sort($a[$key]);
    $a[$key] = current($a[$key]);
    sort($b[$key]);
    $b[$key] = current($b[$key]);
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

function cmp_desc($a, $b){
    $key = current(array_keys($a));
    asort($a[$key]);
    $a[$key] = current($a[$key]);
    asort($b[$key]);
    $b[$key] = current($b[$key]);
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

if($direction=='ASC'){
    usort($res[$sort[0]], 'cmp_asc');
}else{
    usort($res[$sort[0]], 'cmp_desc');
}

In

代码语言:javascript
复制
Array
(
    [emails] => Array
        (
            [0] => Array
                (
                    [email] => Array
                        (
                            [0] => simbad@skifree.com
                            [1] => simbad@work.com
                            [2] => simbad@gmail.com
                        )

                )

            [1] => Array
                (
                    [email] => Array
                        (
                            [0] => angie@gmail.com
                        )

                )
        )
)

Out

代码语言:javascript
复制
Array
(
    [emails] => Array
        (
            [0] => Array
                (
                    [email] => Array
                        (
                            [0] => angie@gmnail.com
                        )

                )

            [1] => Array
                (
                    [email] => Array
                        (
                            [0] => simbad@skifree.com
                            [1] => simbad@work.com
                            [2] => simbad@gmail.com
                        )

                )

        )
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-15 14:20:03

其中一个乌斯托函数与一个自写比较函数相结合,该函数检测两个元素的排序顺序,应该能做到这一点。

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

https://stackoverflow.com/questions/18812642

复制
相关文章

相似问题

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