我有一些数组中的值我想重新索引整个数组,使得第一个值键应该是1而不是0即
默认情况下,在PHP中,数组键从0开始.即0 => a, 1=> b,我想重新索引整个数组以从key = 1开始ie 1=> a, 2=> b, ....
Mic*_*nan 45
$alphabet = array("a", "b", "c");
array_unshift($alphabet, "phoney");
unset($alphabet[0]);
Run Code Online (Sandbox Code Playgroud)
编辑:我决定将此解决方案与本主题中提出的其他解决方案进行对比.这是我使用的非常简单的代码:
$start = microtime(1);
for ($a = 0; $a < 1000; ++$a) {
$alphabet = array("a", "b", "c");
array_unshift($alphabet, "phoney");
unset($alphabet[0]);
}
echo (microtime(1) - $start) . "\n";
$start = microtime(1);
for ($a = 0; $a < 1000; ++$a) {
$stack = array('a', 'b', 'c');
$i= 1;
$stack2 = array();
foreach($stack as $value){
$stack2[$i] = $value;
$i++;
}
$stack = $stack2;
}
echo (microtime(1) - $start) . "\n";
$start = microtime(1);
for ($a = 0; $a < 1000; ++$a) {
$array = array('a','b','c');
$array = array_combine(
array_map(function($a){
return $a + 1;
}, array_keys($array)),
array_values($array)
);
}
echo (microtime(1) - $start) . "\n";
Run Code Online (Sandbox Code Playgroud)
并输出:
0.0018711090087891
0.0021598339080811
0.0075368881225586
Run Code Online (Sandbox Code Playgroud)
Ric*_*uel 43
这是我的建议:
<?php
$alphabet = array(1 => 'a', 'b', 'c', 'd');
echo '<pre>';
print_r($alphabet);
echo '</pre>';
?>
Run Code Online (Sandbox Code Playgroud)
上面的例子将输出:
Array
(
[1] => a
[2] => b
[3] => c
[4] => d
)
Run Code Online (Sandbox Code Playgroud)
Sha*_*eer 21
试试吧
$array = array("a","b","c");
array_unshift($array,"");
unset($array[0]);
Run Code Online (Sandbox Code Playgroud)
当您定义数组并希望第一个键为1时,Ricardo Miguel的解决方案效果最佳.但是如果您的数组已经定义或在其他地方放置(不同的函数或循环),您可以像这样改变它:
$array = array('a', 'b', 'c'); // defined elsewhere
$array = array_filter(array_merge(array(0), $array));
Run Code Online (Sandbox Code Playgroud)
array_merge将一个包含1个空元素和另一个数组的数组放在一起,重新索引它,array_filter然后删除空数组元素($array[0]),使其从1开始.
$array = array('a', 'b', 'c', 'd');
$array = array_combine(range(1, count($array)), array_values($array));
print_r($array);
Run Code Online (Sandbox Code Playgroud)
结果:
Array
(
[1] => a
[2] => b
[3] => c
[4] => d
)
Run Code Online (Sandbox Code Playgroud)
如果您使用的是范围,请尝试以下代码:
$data = array_slice(range(0,12), 1, null, true);
// Array ( [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 [10] => 10 [11] => 11 [12] => 12 )
Run Code Online (Sandbox Code Playgroud)
小智 5
来自手册 http://php.net/manual/en/function.array.php
$firstquarter = array(1 => 'January', 'February', 'March');
print_r($firstquarter);
Run Code Online (Sandbox Code Playgroud)