如何根据键排序关联数组,而不使用任何PHP内置函数


how to sort associative array according to key without using any php built in function

     $array = array(
        '2' => 'a',
        '5' => 'b',
        '1' => 'c',
        '5' => 'd',
        '3' => 'e'
    )
foreach($array as $key => $value){
        $array1 = $array;
        foreach($array1 as $key1 => $value1){
            if($key > $key1){
                $result[$key1] = $value1;
            }
        }
}
    print_r($result);

这是我的输出:

Array
(
    [1] => c
    [2] => a
    [3] => e
)

我正在通过将这个数组存储在另一个数组中来比较键与相同的键。如果num> num在这种情况下的最大值为5(5>5),则此条件失败,因此5不在新数组中。所以,谁能告诉我这将如何排序或有更好的方法。

你的算法不起作用,因为外部循环遍历每个键,而内部循环将尝试将小于当前键的任何键插入数组中。虽然这些键比当前键小,但不能保证它们是升序的。例如,下面的数组不能工作:

array(
  3 => 'a',
  2 => 'b',
  1 => 'c'
);

当然,你可能已经注意到,它有原始数组中缺少一些元素的问题。

相反,您可以使用任何排序算法(如归并排序,快速排序等)先对键进行排序,然后构建新的关联数组。下面实现了insertion_sort(因为它很容易做)。

function insertion_sort($arr)
{
    for ($i = 0; $i < count($arr); $i++) {
        $j = $i;
        while ($j > 0 && $arr[$j] < $arr[$j-1]) {
            $tmp = $arr[$j-1];
            $arr[$j-1] = $arr[$j];
            $arr[$j] = $tmp;
            $j--;
        }
    }
    return $arr;
}
$array = array(
    '2' => 'a',
    '5' => 'b',
    '1' => 'c',
    '5' => 'd',
    '3' => 'e'
);
$keys = array_keys($array);
$sorted = array();
foreach (insertion_sort($keys) as $key) {
    $sorted[$key] = $array[$key];
}
print_r($sorted);

打印

Array
(
    [1] => c
    [2] => a
    [3] => e
    [5] => d
)