首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >排序多维数组:如果列包含子字符串,则优先排序,然后按第二列排序

排序多维数组:如果列包含子字符串,则优先排序,然后按第二列排序
EN

Stack Overflow用户
提问于 2010-01-14 02:37:23
回答 2查看 5.2K关注 0票数 5

我目前正在创建一个由来自mysql查询的值组成的排序方法。

下面是该数组的简要视图:

    Array
    (
        [0] => Array
            (
                ['id'] = 1;
                ['countries'] = 'EN,CH,SP';
            )
        [1] => Array
            (
                ['id'] = 2;
                ['countries'] = 'GE,SP,SV';
            )
    )

我已经成功地实现了一个基于数字id值的普通usort,但我更希望根据"countries“字段的内容(如果它包含一个集合字符串,在本例中是一个国家代码),然后按id字段对数组进行排序。

下面的代码片段是我关于如何做的第一个想法,但我不知道如何将它合并到一个工作函数中:

in_array('EN', explode(",",$a['countries']) );

你会怎么做?

谢谢!

不幸的是,我真的一无所获。

这就是我目前所拥有的,它给我的只是错误:uasort() [function.uasort]: Invalid comparison function

function compare($a, $b) {
    global $usercountry;

        if ( in_array($usercountry, $a['countries']) && in_array($usercountry, $a['countries']) ) {
            $return = 0;
        }

        else if (in_array($usercountry, $a['countries'])) {
            $return = 1;
        }

        else {
            $return = -1;
        }

        return $return;


        }

        $array= usort($array, "compare");

有没有人可以给我一些提示,告诉我如何继续下去?

EN

回答 2

Stack Overflow用户

发布于 2010-01-14 06:30:57

最后在PHP.net上找到了这个奇妙的函数:

        function array_msort($array, $cols)
        {
            $colarr = array();
            foreach ($cols as $col => $order) {
                $colarr[$col] = array();
                foreach ($array as $k => $row) { $colarr[$col]['_'.$k] = strtolower($row[$col]); }
            }
            $eval = 'array_multisort(';
            foreach ($cols as $col => $order) {
                $eval .= '$colarr[\''.$col.'\'],'.$order.',';
            }
            $eval = substr($eval,0,-1).');';
            eval($eval);
            $ret = array();
            foreach ($colarr as $col => $arr) {
                foreach ($arr as $k => $v) {
                    $k = substr($k,1);
                    if (!isset($ret[$k])) $ret[$k] = $array[$k];
                    $ret[$k][$col] = $array[$k][$col];
                }
            }
            return $ret;

        }

每个国家是这样的:$array‘’countries‘= in_array($needle,$haystack);}

$array = $array = array_msort($array, array('countries'=>SORT_DESC, 'id'=>SORT_ASC));

感谢大家的帮助!

票数 2
EN

Stack Overflow用户

发布于 2010-01-14 02:43:59

您可能会考虑array_walkarray_walk_recursivearray_map,当它们组合在一起时,可能会实现您想做的事情。

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

https://stackoverflow.com/questions/2059255

复制
相关文章

相似问题

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