手动对带有字符串键的PHP数组进行排序?

时间:2017-03-17 13:44:38

标签: php arrays sorting key

我想对包含名称作为键和数字作为值的数组进行排序,每个按键和按值排序的函数。

我知道asort()和ksort(),但我想手动执行此操作。最初我尝试了冒泡排序,但很快意识到它不起作用,因为键是字符串,而不是数字。

我该怎么做呢?所以,如果我有阵列:

$ar = array("A" => 10, "D" => 25, "G" => 12)

我如何按值和按键对数组进行排序?我无法找到一种循环方式并对两种不同的值进行排序。

2 个答案:

答案 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比较字符串。