71

我的数组如下所示:

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

我怎样才能重置钥匙,让它像这样0, 1, 2, 3, 4

4

7 回答 7

162

使用array_values

$reindexed_array = array_values($old_array);
于 2012-06-27T11:08:32.007 回答
19
array_splice($old_array, 0, 0);

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

于 2012-10-14T01:10:05.010 回答
10

通过使用sort($array);

请参阅此处的PHP 文档。

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

$reindexed_array = array_values($old_array);

于 2012-06-27T11:08:18.440 回答
2

从 PHP7.4 开始,您可以通过使用 splat 运算符将值解包到数组中来重新索引而无需函数调用。将其视为“重新包装”。

代码:(演示

$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 运算符会阻塞这些键)。非数字演示

损坏被报告为无法解包字符串键,但更准确地说,键必须都是数字的。 整数作为字符串演示浮点演示

于 2019-07-18T09:44:13.597 回答
1
array_splice($jam_array, 0, count($jam_array));

要对缺少中间索引的数组进行排序,使用count顺序更安全。所以0是第一个索引和count($jam_array)sizeof($jam_array)返回数组的小数位,即最后一个索引。

于 2017-09-21T12:24:16.623 回答
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',
]
于 2021-03-05T08:34:36.693 回答
0

简单易行的方法是:

$new_numerical_indexed_array = array_values($old_array);

由 PHP 4、PHP 5、PHP 7、PHP 8 支持,您可以在此处看到

于 2021-10-11T11:17:26.870 回答