我的数组如下所示:
array(
0 => 'val',
2 => 'val',
3 => 'val',
5 => 'val',
7 => 'val'
);
我怎样才能重置钥匙,让它像这样0, 1, 2, 3, 4
?
使用array_values:
$reindexed_array = array_values($old_array);
array_splice($old_array, 0, 0);
它不会对数组进行排序,也不会创建第二个数组
通过使用sort($array);
请参阅此处的PHP 文档。
我会推荐sort
over array_values
,因为它不会创建第二个数组。使用以下代码,您现在有两个占用空间的数组:$reindexed_array 和 $old_array。不必要。
$reindexed_array = array_values($old_array);
从 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 运算符会阻塞这些键)。非数字演示
array_splice($jam_array, 0, count($jam_array));
要对缺少中间索引的数组进行排序,使用count顺序更安全。所以0
是第一个索引和count($jam_array)
或sizeof($jam_array)
返回数组的小数位,即最后一个索引。
值得指出的是,问题中的数组是一种非常特殊的情况,其中所有值都相同,并且键已经按升序排列。如果您有一个具有任何随机顺序的不同值和键的数组,并且您想按键对其进行排序并重新索引键,则现有答案将不会达到您的预期。
例如,如果你有这样的事情:
[
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',
]
简单易行的方法是:
$new_numerical_indexed_array = array_values($old_array);
由 PHP 4、PHP 5、PHP 7、PHP 8 支持,您可以在此处看到