【问题标题】:Sorting a PHP array, with strings of keys, manually?手动对带有键字符串的PHP数组进行排序?
【发布时间】:2017-03-17 13:44:37
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您对问题中的数组的预期结果是什么?
  • 无论原始 asort() 的结果是什么。所以它会按照从低到高的顺序对值进行排序。
  • 编辑:这同样适用于 ksort() 将产生的内容,因此它会将上述数组按键按字母顺序排序。

标签: php arrays sorting key


【解决方案1】:

此代码可能已满。

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

输出:

Array
(
    [A] => 10
    [B] => 11
    [G] => 12
    [D] => 25
)
Array
(
    [A] => 10
    [B] => 11
    [D] => 25
    [G] => 12
)

【讨论】:

  • 如果键是“asd”、“frr”、“k”、“Asd”等,这会起作用吗?
【解决方案2】:

使用strcmp 比较字符串。

【讨论】:

    猜你喜欢
    • 2014-04-16
    • 1970-01-01
    • 2022-01-20
    • 2016-10-24
    • 2018-02-15
    • 2016-07-18
    相关资源
    最近更新 更多