方法一:
function arr_sort($arr)
{
for ($i = 0; $i<count($arr)-1; $i++){ // 控制轮数
for ($j=0; $j < count($arr)-1-$i; $j++) { // 比较元素 替换元素
$v = $arr[$j];
$next_v = $arr[$j+1];
$weight = array_values($v);
$next_weight = array_values($next_v);
if($weight < $next_weight){
$arr[$j] = $next_v;
$arr[$j+1] = $v;
}
}
}
return $arr;
}
$arr = [['A'=>10], ['B'=>20], ['C'=> 20],['D'=> 80]];
print_r(arr_sort($arr));
结果:
Array
(
[0] => Array
(
[D] => 80
)
[1] => Array
(
[B] => 20
)
[2] => Array
(
[C] => 20
)
[3] => Array
(
[A] => 10
)
)
方法二 (在方法一的基础上进行优化):
// 有序区的长度可能会大于轮数
function arr_sort_v2($arr)
{
for ($i = 0; $i<count($arr)-1; $i++){ // 控制轮数
$is_sorted = true; # 有序标记
$last_exchange_index = 0; # 最后一次交换的位置
$sort_border = count($arr)-1; # 交换数组的边界
for ($j=0; $j < $sort_border; $j++) { // 比较元素 替换元素
$v = $arr[$j];
$next_v = $arr[$j+1];
$weight = array_values($v);
$next_weight = array_values($next_v);
if($weight < $next_weight){
$arr[$j] = $next_v;
$arr[$j+1] = $v;
$is_sorted = false; # 有元素进行交换,所以不是有序的,设为false
$last_exchange_index = $j;
}
}
$sort_border = $last_exchange_index;
if($is_sorted){
break;
}
}
return $arr;
}
$arr = [['A'=>10], ['B'=>20], ['C'=> 20],['D'=> 80],['E'=> 9],['F'=> 8]];
print_r(arr_sort_v2($arr));
结果:
Array
(
[0] => Array
(
[D] => 80
)
[1] => Array
(
[B] => 20
)
[2] => Array
(
[C] => 20
)
[3] => Array
(
[A] => 10
)
[4] => Array
(
[E] => 9
)
[5] => Array
(
[F] => 8
)
)