PHP数组键重新排序

时间:2012-06-27 11:07:08

标签: php arrays sorting

我的数组看起来像这样:

array(
  0 => 'val',
  2 => 'val',
  3 => 'val',
  5 => 'val',
  7 => 'val'
);

如何重新排序按键,使它像0, 1, 2, 3, 4一样?

6 个答案:

答案 0 :(得分:121)

使用array_values

$reindexed_array = array_values($old_array);

答案 1 :(得分:12)

array_splice($old_array, 0, 0);

它不会对数组进行排序,也不会创建第二个数组

答案 2 :(得分:10)

使用sort($array);

请参阅PHP文档here

我建议sort超过array_values,因为它不会创建第二个数组。使用以下代码,您现在有两个占用空间的数组:$ reindexed_array和$ old_array。不必要。

$reindexed_array = array_values($old_array);

答案 3 :(得分:1)

$_GET['id']

要对缺少中间索引的数组进行排序,使用 count ,订单会更安全。因此array_splice($jam_array, 0, count($jam_array)); 是第一个索引,0count($jam_array)返回数组的小数位,即最后一个索引。

答案 4 :(得分:0)

从PHP7.4开始,您可以使用splat运算符将值解压缩为数组,从而无需函数调用即可重新编制索引。将此视为“重新打包”。

代码:(Demo

$array = array(
  0 => 'val',
  2 => 'val',
  3 => 'val',
  5 => 'val',
  7 => 'val'
);

$array = [...$array];

var_export($array);

输出:

array (
  0 => 'val',
  1 => 'val',
  2 => 'val',
  3 => 'val',
  4 => 'val',
)

注意:此技术将用于关联键(这些键上的splat运算符会阻塞)。 Non-numeric demo

据报道,破损是无法解压 string 键的,但是更准确地说,键必须全部为数字。 Integer as string demoFloat demo

答案 5 :(得分:0)

值得指出的是,问题中的数组是一个非常特殊的情况,其中所有值都相同并且键已经按升序排列。如果您有一个具有任意随机顺序的不同值和键的数组,并且您想按键对其进行排序并重新索引键,那么现有的答案将不会如您所愿。

例如,如果您有这样的事情:

[
    7 => 'foo',
    0 => 'bar',
    2 => 42
];

而你想以这样的方式结束:

[
    0 => 'bar',
    1 => 42,
    2 => 'foo',
]

你不能只使用 array_values()array_splice()sort(),因为你最终会得到

[
    0 => 'foo',
    1 => 'bar',
    2 => 42,
]

相反,您首先需要使用 ksort() 根据键对数组进行排序,然后然后使用 array_values() 重新索引键:

$arr = [
    7 => 'foo',
    0 => 'bar',
    2 => 42
];

ksort($arr, SORT_NUMERIC);
$arr = array_values($arr);

结果:

[
    0 => 'bar',
    1 => 42,
    2 => 'foo',
]