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