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