多维数组排序可分为单列排序和嵌套排序。单列排序可使用 array_multisort() 函数按列排序;嵌套排序需要递归函数遍历数组并排序。实战案例包括按产品名称排序和按销售量和价格复合排序。
PHP 数组多维排序实战:从简单到复杂场景
引言
在 PHP 中,对多维数组进行排序通常是一项复杂的任务。本教程将引导你逐步了解如何根据不同的场景进行多维数组排序,从简单的单列排序到复杂的嵌套排序。
单列排序
最简单的多维数组排序是根据单列进行排序。你可以使用 array_multisort()
函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | $arr = [
[ 'id' => 1, 'name' => 'John Doe' ],
[ 'id' => 3, 'name' => 'Jane Smith' ],
[ 'id' => 2, 'name' => 'Bob Johnson' ],
];
array_multisort (array_column( $arr , 'id' ), SORT_ASC, $arr );
print_r( $arr );
|
Salin selepas log masuk
嵌套数组排序
对于嵌套数组,你需要使用递归函数来遍历数组并对其进行排序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | function sortNestedArray( $arr , $col , $order ) {
if (! is_array ( $arr )) {
return $arr ;
}
uasort( $arr , function ( $a , $b ) use ( $col , $order ) {
if ( $a [ $col ] == $b [ $col ]) {
return 0;
}
return ( $a [ $col ] < $b [ $col ]) ? -1 : 1;
});
foreach ( $arr as & $item ) {
if ( is_array ( $item )) {
$item = sortNestedArray( $item , $col , $order );
}
}
return $arr ;
}
|
Salin selepas log masuk
实战案例
案例 1:按产品名称对嵌套数组进行排序
1 2 3 4 5 6 7 8 9 | $products = [
[ 'id' => 1, 'name' => 'Apple' , 'price' => 10],
[ 'id' => 2, 'name' => 'Orange' , 'price' => 15],
[ 'id' => 3, 'name' => 'Banana' , 'price' => 5],
];
$sortedProducts = sortNestedArray( $products , 'name' , SORT_ASC);
|
Salin selepas log masuk
案例 2:按销售量和价格对嵌套数组进行复合排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $salesData = [
[ 'product' => 'Apple' , 'count' => 10, 'price' => 10],
[ 'product' => 'Orange' , 'count' => 15, 'price' => 15],
[ 'product' => 'Banana' , 'count' => 5, 'price' => 5],
];
usort( $salesData , function ( $a , $b ) {
if ( $a [ 'count' ] == $b [ 'count' ]) {
return ( $a [ 'price' ] < $b [ 'price' ]) ? -1 : 1;
}
return ( $a [ 'count' ] < $b [ 'count' ]) ? 1 : -1;
});
|
Salin selepas log masuk
Atas ialah kandungan terperinci Amalan pengisihan pelbagai dimensi tatasusunan PHP: daripada senario mudah kepada kompleks. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!