Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
手动排序带有字符串的PHP数组?_Php_Arrays_Sorting_Key - Fatal编程技术网

手动排序带有字符串的PHP数组?

手动排序带有字符串的PHP数组?,php,arrays,sorting,key,Php,Arrays,Sorting,Key,我想对数组进行排序,数组中的名称作为键,数字作为值,每个数组都有一个按键和按值排序的函数 我知道asort()和ksort(),但我想手动执行此操作。起初我尝试了气泡排序,但很快意识到它不起作用,因为键是字符串,而不是数字 我该怎么做呢?如果我有数组: $ar = array("A" => 10, "D" => 25, "G" => 12) 如何按值和键对数组进行排序?我找不到一种方法来循环遍历它并对两个不同的值进行排序 此代码可能已被完全使用 $ar = array("A"

我想对数组进行排序,数组中的名称作为键,数字作为值,每个数组都有一个按键和按值排序的函数

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

我该怎么做呢?如果我有数组:

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

如何按值和键对数组进行排序?我找不到一种方法来循环遍历它并对两个不同的值进行排序

此代码可能已被完全使用

$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);

用于比较字符串

对于问题中的数组,您希望得到什么结果?无论原始asort()的结果是什么。因此,它将按从低到高的顺序对值进行排序。编辑:这同样适用于ksort()将生成的内容,因此它将按键按字母顺序对上述数组进行排序。如果键是“asd”、“frr”、“k”、“asd”等,这是否可行。
Array
(
    [A] => 10
    [B] => 11
    [G] => 12
    [D] => 25
)
Array
(
    [A] => 10
    [B] => 11
    [D] => 25
    [G] => 12
)