Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何像mysql一样对数组进行排序_Php_Mysql_Arrays - Fatal编程技术网

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

Php 如何像mysql一样对数组进行排序,php,mysql,arrays,Php,Mysql,Arrays,如何对与数据库数据相同的数组进行排序 我请求google analytics数据,该数据是一个大型数组,我想将该数组与本地数据库中的其他字段连接起来,然后我再次扩展大型数组。现在,我想对大数组进行排序,这与使用我的sql相同,如下所示: select * from ga_table where ... select * from ga_table order by age select * from ga_table group by name 我现在的数组如下所示: $arr=array(

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

我请求google analytics数据,该数据是一个大型数组,我想将该数组与本地数据库中的其他字段连接起来,然后我再次扩展大型数组。现在,我想对大数组进行排序,这与使用我的sql相同,如下所示:

select * from ga_table where ...
select * from ga_table order by age
select * from ga_table group by name
我现在的数组如下所示:

$arr=array(
    'header'=>array('name','age','money'),
    'values'=>array(
        array('jimmy',20,30),
        array('tina',18,12),
        array('darcy',19,50),
    )
);
但是现在我有一个大数组而不是db表,那么如何对数组进行排序呢?

您可以尝试
数组\u多排序

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

array_multisort($name, SORT_ASC, $arr['values']);
或按名称描述:

array_multisort($name, SORT_DESC, $arr['values']);
或年龄ASC:

array_multisort($age, SORT_ASC, $arr['values']);
或年龄描述和姓名ASC

array_multisort($age, SORT_DESC, $name, SORT_ASC, $arr['values']);
等等。。所有这些都是PHP内置函数,用于对数组进行排序


为了更好地理解,您可以访问链接

,感谢@mamdouh alramadan

我编写了一个帮助函数来像MySQL一样对数组进行排序

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;
}
用法 输出为:

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
        )

)

也许可以加上你想要的分类方式?名称、值?类似“看一看”的PHP内置了排序函数,但这取决于您想做什么以及您希望如何对其进行排序?按姓名、年龄或金钱?
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;
}
$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);
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
        )

)