我有一些数组值开始我想重新索引整个阵列,使得第一个值的关键应该是,而不是1个零,即如何改变阵列键从1而不是0
默认在PHP从0即0 => a, 1=> b
数组键启动,我要重新索引整个阵列从钥匙= 1即1=> a, 2=> b, ....
我有一些数组值开始我想重新索引整个阵列,使得第一个值的关键应该是,而不是1个零,即如何改变阵列键从1而不是0
默认在PHP从0即0 => a, 1=> b
数组键启动,我要重新索引整个阵列从钥匙= 1即1=> a, 2=> b, ....
$alphabet = array("a", "b", "c");
array_unshift($alphabet, "phoney");
unset($alphabet[0]);
编辑开始:我决定把基准这种解决方案与其他本主题中提出。这里是非常简单的代码我使用:
$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";
和输出:
0.0018711090087891
0.0021598339080811
0.0075368881225586
这也是很好的技术 – 2011-03-21 05:43:56
谢谢Michael Mctirnan, – 2011-03-21 05:48:54
@ user569403请记住,接受... – 2011-03-21 05:49:26
试试这个
<?php
$stack = array('a', 'b', 'c', 'd');
$i= 1;
foreach($stack as $value){
$stack2[$i] = $value;
$i++;
}
$stack = stack2;
?>
只要试试这个
$array = array("a","b","c");
array_unshift($array,"");
unset($array[0]);
这里是我的建议:
<?php
$alphabet = array(1 => 'a', 'b', 'c', 'd');
echo '<pre>';
print_r($alphabet);
echo '</pre>';
?>
上面的例子将输出:
Array
(
[1] => a
[2] => b
[3] => c
[4] => d
)
此解决方案比已接受的解决方案更加简单快捷。 – anasaitali 2013-08-28 10:50:12
我更喜欢这个解决方案。 – iamkeir 2014-05-29 16:26:58
您的回复忽略了我们不能任意选择索引!否则,问题不在那里! – 2014-08-02 13:23:39
里卡多米格尔的解决方案效果最好,当你确定你的阵列,并希望第一个关键是1.但是,如果你的阵列已经被定义或者被放一起别处(不同的功能或循环)可以对其进行更改这样的:
$array = array('a', 'b', 'c'); // defined elsewhere
$array = array_filter(array_merge(array(0), $array));
array_merge
会把含有1个空元件的阵列和其它阵列一起,重新索引它,然后0将移除空数组元素($array[0]
),使其为1。
我比其他人更喜欢你的解决方案,因为ricardo的解决方案是用于阵列的静态定义 – 2014-06-23 10:37:16
我喜欢你的解决方案。 – Aamir 2016-04-26 09:08:09
不,这是一个错误的解决方案,'array_filter'将删除所有空值,而不仅仅是合并的元素。例如,如果'$ array = array('a','b','');',你将失去第三个元素,它应该被保留。 – Fishdrowned 2017-06-07 12:49:18
启动如果使用的范围内,尽量此代码:
$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)
从手动 http://php.net/manual/en/function.array.php
$firstquarter = array(1 => 'January', 'February', 'March');
print_r($firstquarter);
$array = array('a', 'b', 'c', 'd');
$array = array_combine(range(1, count($array)), array_values($array));
print_r($array);
结果:
Array
(
[1] => a
[2] => b
[3] => c
[4] => d
)
是否有任何理由不能只使用基于零的数组? – Jacob 2011-03-21 05:45:06
@Jacob,例如,使用'%== 0'来定义'