我的数组看起来像这样:
array(
0 => 'val',
2 => 'val',
3 => 'val',
5 => 'val',
7 => 'val'
);
如何重新排序按键,使它像0, 1, 2, 3, 4
一样?
答案 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));
是第一个索引,0
或count($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 demo和Float 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',
]