Php 对数据库行进行多次排序

Php 对数据库行进行多次排序,php,sorting,Php,Sorting,我想使用php对数据库行数组进行2次排序。首先对一列进行排序,然后在第一个排序排列中进行第二个排序 我有一行存储在$result中 Array ( [0] => Array ( [brand] => nike [product] => 1020 ) [1] => Array ( [brand] => adidas

我想使用php对数据库行数组进行2次排序。首先对一列进行排序,然后在第一个排序排列中进行第二个排序

我有一行存储在$result中

Array
(
    [0] => Array
        (
            [brand] => nike
            [product] => 1020
        )
    [1] => Array
        (
            [brand] => adidas
            [product] => 1008
        )
    [2] => Array
        (
            [brand] => nike
            [product] => 1010
        )
    [3] => Array
        (
            [brand] => adidas
            [product] => 1001
        )
    [4] => Array
        (
            [brand] => nike
            [product] => 1018
        )
}
我首先排序品牌,顺序是不必要的,但我只需要组在一起,我收到一个排序结果,如

Array
(
    [4] => Array
        (
            [brand] => nike
            [product] => 1018
        )
    [0] => Array
        (
            [brand] => nike
            [product] => 1020
        )
    [2] => Array
        (
            [brand] => nike
            [product] => 1010
        )
    [1] => Array
        (
            [brand] => adidas
            [product] => 1008
        )
    [3] => Array
        (
            [brand] => adidas
            [product] => 1001
        )
}
现在我需要按行键按升序排序,但在每个品牌中,我想要的结果如下所示

Array
(
    [0] => Array
        (
            [brand] => nike
            [product] => 1020
        )
    [2] => Array
        (
            [brand] => nike
            [product] => 1010
        )
    [4] => Array
        (
            [brand] => nike
            [product] => 1018
        )
    [1] => Array
        (
            [brand] => adidas
            [product] => 1008
        )
    [3] => Array
        (
            [brand] => adidas
            [product] => 1001
        )
}
我是这样做到的

$result = original row unaltered/sorted

//create brand array for column data also preserving row key

foreach($rows as $array => $row)
{
    $brand[$array] = $row['brand'];
}

//sort_natural here irrelevant, this is just to group together brands

arsort($brand, SORT_NATURAL);

$brand_count = array_count_values($brand);
$unique_brands = array_unique($brand);

//I separate the brand array by each brand, whilst also maintaining row keys, and put them in a multidimensional array

foreach($unique_brands as $key => $value)
{
       $i = 1;
       while($i <= $brand_count[$value])
       {
            $sorted_brands[$value][key($brand)] = current($brand);
            next($brand);
            $i++;
       }
}

//sort row keys we preserved which represent the original row ascendingly

foreach($sorted_brands as $key => $value)
    ksort($sorted_brands[$key], SORT_ASC);

//now I put all this back into 1 array

foreach($sorted_brands as $multi)
    foreach($multi as $key => $value)
        $final[$key] = $value;
现在,我使用这些键创建一个新数组,用于顺序和引用旧的原始数组以加载相应的值

foreach($final as $key => $value)
    $complete[$key] = $result[$key];
这一过程得到了预期的结果,但尽管如此,我想知道他们是否是一种更简单、更容易实现这一点的方法,我尝试使用诸如array_multisort、array_column、array_value等函数来实现这一结果,但却一无所获


提前感谢您的建议/帮助。

因为您的数据行具有相同的结构和大小,您可以调用sort


这将首先按品牌价值按字母顺序排列行,然后按产品价值按字母顺序排列行。

为什么不按数据库查询排序?类似于选择。。。按品牌订购,id ascI可以达到您所说的效果,但如果有类似我的建议但更简单的替代方法,我会很好奇。
foreach($final as $key => $value)
    $complete[$key] = $result[$key];
sort($array);
var_export($array);