我想对包含名称作为键和数字作为值的数组进行排序,每个按键和按值排序的函数。
我知道asort()和ksort(),但我想手动执行此操作。最初我尝试了冒泡排序,但很快意识到它不起作用,因为键是字符串,而不是数字。
我该怎么做呢?所以,如果我有阵列:
$ar = array("A" => 10, "D" => 25, "G" => 12)
我如何按值和按键对数组进行排序?我无法找到一种循环方式并对两种不同的值进行排序。
答案 0 :(得分:0)
此代码可能已全部使用。
$ar = array("A" => 10, "D" => 25, "G" => 12,'B'=>11);
function bubbleSortValues($array){ // sort by value
$new_array = array_values($array); // get array values
$length = count($new_array);
// perform buuble sort
for ($outer = 0; $outer < $length; $outer++) {
for ($inner = 0; $inner < $length; $inner++) {
if ($new_array[$outer] < $new_array[$inner]) {
$tmp = $new_array[$outer];
$new_array[$outer] = $new_array[$inner];
$new_array[$inner] = $tmp;
}
}
}
// loop the sorted array and generate original array with keys and values
foreach($new_array as $key=>$value){
$sorted_array[array_search($value, $array)] = $value;
}
return $sorted_array;
}
function bubbleSortKeys($array){ //sort by key
$new_array = array_keys($array); // get array keys
$length = count($new_array);
// perform buuble sort
for ($outer = 0; $outer < $length; $outer++) {
for ($inner = 0; $inner < $length; $inner++) {
if ($new_array[$outer] < $new_array[$inner]) {
$tmp = $new_array[$outer];
$new_array[$outer] = $new_array[$inner];
$new_array[$inner] = $tmp;
}
}
}
// loop the sorted array and generate original array with keys and values
foreach($new_array as $key=>$value){
$sorted_array[$value] = $array[$value];
}
return $sorted_array;
}
echo "<pre>";
$values = bubbleSortValues($ar);
print_r($values);
$keys = bubbleSortKeys($ar);
print_r($keys);
OUT PUT:
Array
(
[A] => 10
[B] => 11
[G] => 12
[D] => 25
)
Array
(
[A] => 10
[B] => 11
[D] => 25
[G] => 12
)
答案 1 :(得分:0)
使用strcmp比较字符串。