按自然顺序对数组进行排序,而不维护索引号


Sort array by natural order without maintaining index numbers

我正在用natsort($myarray)$myarray进行排序。数组已排序并保留索引号,如下所示。

排序前

Array ( [0] => 2 C [1] => 3 A [2] => 1 B ) 

排序后

Array ( [2] => 1 B [0] => 2 C [1] => 3 A )

是否可以在不维护索引号的情况下进行排序?排序后,我期望有一个这样的数组:

预期成果

Array ( [0] => 1 B [1] => 2 C [2] => 3 A )

试试这个

<?php
$your_array = array('2 C', '3 A', '1 B'); 
natsort($your_array);
$your_array = array_values($your_array);
print_r($your_array);
?>

只需使用nasortarray_values函数即可。

natsort()函数使用"自然顺序"对数组进行排序 算法。这些值保留其原始键。

因为nasort保留键,所以你需要使用 array_values ,它会创建一个具有相对索引的新数组。

过程

$arr = array('0' => '2 C', '1' => '3 A', '2' => '1 B'); 
natsort($arr);
$arr = array_values($arr);
print_r($arr);

结果

Array
(
    [0] => 1 B
    [1] => 2 C
    [2] => 3 A
)

您可以在获取值后将数组放入新变量中,只能这样。$sorted_new_array = array_values($your_sorted_array);

您可以使用带有自然排序选项的普通排序来执行单行:

sort($array,SORT_NATURAL);

例:

$fruits = array("lemon3", "lemon2", "orange2","orange10", "banana4", "apple9");
sort($fruits,SORT_NATURAL);
print_r($fruits);

数组 ( [0] => 苹果9 [1] => 香蕉4 [2] => 柠檬2 [3] =>柠檬3 [4] => 橙色2 [5] => 橙色10 )

您可以使用 array_values() 重置密钥。

排序()

使用这两个函数并创建相同输出的代码:

<?php
$arr = array ('2 C', '3 A', '1 B');
$sorted = array_values($arr);
echo '<pre>';print_r($sorted);echo '</pre>';
sort($arr);
echo '<pre>';print_r($arr);echo '</pre>';
?>

输出:

Array
(
    [0] => 2 C
    [1] => 3 A
    [2] => 1 B
)
Array
(
    [0] => 1 B
    [1] => 2 C
    [2] => 3 A
)
    <?php
$arr = array ('2C', '3A', '1B');
//predefined function
uasort($arr,'sortArray');
function sortArray($indexOne, $indexTwo)
{
    if($indexOne < $indexTwo)
        return -1; 
    if($indexOne > $indexTwo)
        return 1;
    if($indexOne == $indexTwo)
        return 0;
}
$getResult = array_values($arr);
print_r($getResult);
?>