$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不在新数组中。所以,任何人都可以告诉我这将是如何排序或有更好的方法。 提前谢谢。
答案 0 :(得分:2)
您的算法不起作用,因为外部循环遍历每个键,内部循环将尝试将少于当前键的任何键插入到数组中。虽然这些键小于当前键,但它不保证它们按升序排列。例如,以下数组将不起作用:
array(
3 => 'a',
2 => 'b',
1 => 'c'
);
当然,它有一个问题,就是你可能已经注意到了原始数组中遗漏了一些元素。
相反,您可以使用任何排序算法(如mergesort,quicksort等)首先对键进行排序,然后构建新的关联数组。下面实现了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
)