首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何像mysql一样对数组进行排序

问如何像mysql一样对数组进行排序
EN

Stack Overflow用户
提问于 2013-10-29 10:01:16
回答 3查看 2.5K关注 0票数 4

如何对与数据库数据相同的数组进行排序?

我请求谷歌分析数据,数据是一个larget数组,我想加入数组与一些其他字段从我的本地数据库,然后我再次扩展大数组。现在,我想对大型数组进行排序,这与使用我的sql相同,如下所示:

代码语言:javascript
复制
select * from ga_table where ...
select * from ga_table order by age
select * from ga_table group by name

我的数组现在就像:

代码语言:javascript
复制
$arr=array(
    'header'=>array('name','age','money'),
    'values'=>array(
        array('jimmy',20,30),
        array('tina',18,12),
        array('darcy',19,50),
    )
);

但是现在我有一个大数组而不是db表,那么如何对数组进行排序呢?

​

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-29 10:15:17

您可以尝试array_multisort:http://php.net/manual/en/function.array-multisort.php

代码语言:javascript
复制
foreach ($arr['values'] as $key => $row) {
    $name[$key]  = $row[0];
    $age[$key] = $row[1];
    $money[$key] = $row[3];
}

现在,如果要在ASC中按名称进行排序,则可以:

代码语言:javascript
复制
array_multisort($name, SORT_ASC, $arr['values']);

或更名为DESC:

代码语言:javascript
复制
array_multisort($name, SORT_DESC, $arr['values']);

或年龄ASC:

代码语言:javascript
复制
array_multisort($age, SORT_ASC, $arr['values']);

或年龄和ASC名称

代码语言:javascript
复制
array_multisort($age, SORT_DESC, $name, SORT_ASC, $arr['values']);
票数 9
EN

Stack Overflow用户

发布于 2013-10-29 10:15:37

代码语言:javascript
复制
 asort(); 
 arsort();
 krsort(); 

等等。所有这些都是PHP内置函数,用于对数组进行排序。

为了更好地理解,您可以访问链接http://php.net/manual/en/array.sorting.php

票数 1
EN

Stack Overflow用户

发布于 2020-11-05 09:02:41

感谢@mamdouh alramadan!

我编写了一个帮助函数来对数组进行排序,比如MySQL

代码语言:javascript
复制
function arrayOrderBy(array $items, array $orderBy)
{
    if (empty($items) || empty($orderBy)) {
        return $items;
    }

    $multisortArgs = [];

    foreach ($orderBy as $field => $direction) {
        $columnValues = array_column($items, $field);

        if (empty($columnValues)) {
            continue;
        }

        $multisortArgs[] = $columnValues;
        $multisortArgs[] = strtoupper($direction) === 'ASC' ? SORT_ASC : SORT_DESC;
    }

    if (empty($multisortArgs)) {
        return $items;
    }

    $multisortArgs[] = &$items;

    call_user_func_array('array_multisort', $multisortArgs);

    return $items;
}

用法

代码语言:javascript
复制
$data[] = array('volume' => 67, 'edition' => 7);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 2);

$sorted = arrayOrderBy($data, ['volume' => 'desc', 'edition' => 'asc']);

print_r($sorted);

产出如下:

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [volume] => 98
            [edition] => 2
        )

    [1] => Array
        (
            [volume] => 86
            [edition] => 1
        )

    [2] => Array
        (
            [volume] => 86
            [edition] => 6
        )

    [3] => Array
        (
            [volume] => 85
            [edition] => 6
        )

    [4] => Array
        (
            [volume] => 67
            [edition] => 2
        )

    [5] => Array
        (
            [volume] => 67
            [edition] => 7
        )

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

https://stackoverflow.com/questions/19654966

复制
相关文章

相似问题

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