对数组进行排序并分配新的数字键?

ajs*_*sie 10 php arrays sorting

我有一个像这样的数组(在我取消一些元素之后):

$array[3] = 'apple';
$array[5] = 'pear';
$array[23] = 'banana';
Run Code Online (Sandbox Code Playgroud)

我用哪个函数对它们进行排序:

$array[0] = 'apple';
$array[1] = 'pear';
$array[2] = 'banana';
Run Code Online (Sandbox Code Playgroud)

我尝试了一些排序功能,但它没有用.

cle*_*tus 19

我不是100%肯定你的意图.要简单地根据对数组进行排序但是分配新键,请使用sort():

sort($array);
print_r($array);
Run Code Online (Sandbox Code Playgroud)

使用此特定功能不会保留密钥.输出:

Array
(
    [0] => apple
    [1] => banana
    [2] => pear
)
Run Code Online (Sandbox Code Playgroud)

但是如果要按键值使用对数组进行排序ksort():

ksort($array);
print_r($array);
Run Code Online (Sandbox Code Playgroud)

输出:

Array
(
    [3] => apple
    [5] => pear
    [23] => banana
)
Run Code Online (Sandbox Code Playgroud)

然而,这将保留密钥.要从0开始重新分配数组的键,请使用array_values()结果:

ksort($array);
$array_with_new_keys = array_values($array); // sorted by original key order
print_r($array_with_new_keys);
Run Code Online (Sandbox Code Playgroud)

输出:

Array
(
    [0] => apple
    [1] => pear
    [2] => banana
)
Run Code Online (Sandbox Code Playgroud)

  • Cletus,他不想按价值排序(看:苹果、梨、香蕉)。sort() 会做:苹果、香蕉、梨。看看我的回答。 (2认同)

Seb*_*Seb 8

ksort()将重点进行排序,然后用得到的值array_values() ,并且将创建密钥的新数组0n-1.

ksort($array)
$array = array_values( $array );
Run Code Online (Sandbox Code Playgroud)

当然,如果已经按键排序,则不需要ksort.您也可以直接使用array_values().