【问题标题】:How to assign new numerical keys to an array and sort based on the original keys? [duplicate]如何将新的数字键分配给数组并根据原始键进行排序? [复制]
【发布时间】:2009-12-23 00:49:09
【问题描述】:

我有一个带有数字索引的数组,看起来像这样(在我取消设置一些元素之后):

$array = [
    23 => 'banana',
    3 => 'apple',
    5 => 'pear',
];

我使用哪个函数根据它们的键顺序对它们重新排序:

$array = [
    0 => 'apple',
    1 => 'pear',
    2 => 'banana',
];

我尝试了一些排序功能,但没有一个提供我需要的输出。

【问题讨论】:

标签: php arrays


【解决方案1】:

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

ksort($array);
print_r($array);

输出:

Array
(
    [3] => apple
    [5] => pear
    [23] => banana
)

但是,这将保留密钥。要从 0 开始为数组重新分配键,请在结果上使用 array_values()

ksort($array);
$array_with_new_keys = array_values($array); // sorted by original key order
print_r($array_with_new_keys);

输出:

Array
(
    [0] => apple
    [1] => pear
    [2] => banana
)

【讨论】:

  • Cletus,他不想按值排序(看:苹果、梨、香蕉)。 sort() 会做:苹果,香蕉,梨。看我的回答。
【解决方案2】:

ksort() 将按键排序,然后使用array_values() 获取值,这将创建一个新数组,其中键从0n-1

ksort($array)
$array = array_values( $array );

当然,如果已经按键排序,则不需要 ksort。还不如直接用array_values()。

【讨论】:

    【解决方案3】:
    $arrayOne = array('one','two','three'); //You set an array with certain elements
    unset($array[1]);                       //You unset one or more elements.
    $arrayTwo = array_values($arrayOnw);    //You reindex the array into a new one.
    
    print_r($arrayTwo);                     //Print for prove.
    

    print_r 结果是:

    Array ( [0] => one [1] => three )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2013-05-14
      相关资源
      最近更新 更多