Php 如何将数组键更改为从1开始而不是从0开始
我有一些数组中的值,我想重新索引整个数组,这样第一个值键应该是1而不是0,即 在PHP中,默认情况下,数组键从0开始。i、 e.Php 如何将数组键更改为从1开始而不是从0开始,php,arrays,Php,Arrays,我有一些数组中的值,我想重新索引整个数组,这样第一个值键应该是1而不是0,即 在PHP中,默认情况下,数组键从0开始。i、 e.0=>a,1=>b,我想重新索引整个数组,从key=1开始,即1=>a,2=>b,…。 $alphabet = array("a", "b", "c"); array_unshift($alphabet, "phoney"); unset($alphabet[0]); 编辑:我决定对本主题中提出的其他解决方案进行基准测试。下面是我使用的非常简单的代码: $start
0=>a,1=>b
,我想重新索引整个数组,从key=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";
试试这个
<?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>';
?>
Ricardo Miguel的解决方案在定义数组并希望第一个键为1时效果最好。但是,如果您的数组已经定义或在其他地方组合在一起(不同的函数或循环),您可以这样修改它:
$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 )
array\u merge
将一个包含1个空元素的数组和另一个数组放在一起,对其重新索引,array\u filter
然后将删除空数组元素($array[0]
),使其从1开始。如果使用范围,请尝试以下代码:
$array = array('a', 'b', 'c', 'd');
$array = array_combine(range(1, count($array)), array_values($array));
print_r($array);
结果是:
foreach($items as $index => $item){
echo $index+1 . $item
}
我知道这个答案非常古老,但我的解决方案是在索引中添加+1。我会这样做,因为我认为这是更快,更容易阅读。当你打印它时,它将从1开始,因为0+1=1,然后是2,以此类推
$x = array("a","b","c");
$y =array_combine(range(1, count($x)), $x);
print_r($y);
我认为这很简单:
'Month'=> [ 1 => "January","February","March","April","May","June","July","August","September","October","November","December"],
在php中使用
$data = ['a', 'b', 'c', 'd'];
$data = array_merge([''], $data);
unset($data[0]);
我发现,在PHP7.1+版本上,这将比公认的解决方案稍好一些
基准代码:
0.0011248588562012
0.0017051696777344
这些基准的差异会随着数组值数量的增加而增加。有什么理由不能只使用基于零的数组吗?@Jacob,例如,一个for循环,它使用
%==0
来定义
和
标记。$i[0]
使
跳闸。无论如何,这就是我在这个问题上的结局:)为什么在这个问题上有这么多赞成票?基于0的索引有什么问题?此解决方案比公认的解决方案更简单、更快。您的回答忽略了我们不能随意选择索引!否则,问题就不存在了!这个解决方案也忽略了,有时数组是动态生成并传递给变量的,因此我们不能在没有额外不必要的代码的情况下访问第一个键。我更喜欢我们的解决方案,因为ricardo的解决方案是针对arrayNo的静态定义的,这是一个错误的解决方案,array\u filter
将删除所有空值,而不仅仅是合并的元素。例如,如果$array=array('a','b','')代码>,您将丢失应保留的第三个元素。@fishbounded它不是通用解决方案。仅供参考,在第二种方法中,$i=1;foreach($stack1作为$value){$stack2[$i]=$value;$i++;}
将不会执行与foreach($stack1作为$k=>$val){$stack2[$k+1]=$val;}
相同的操作。回答非常好!如果索引和值都匹配,并且从1开始,或者array\u combine(范围(1,10),范围(1,10))
如果您只需要数字,那么这样做很好。我假设这个正确的工作答案只会被否决,因为它是一个纯代码的答案。
$x = array("a","b","c");
$y =array_combine(range(1, count($x)), $x);
print_r($y);
'Month'=> [ 1 => "January","February","March","April","May","June","July","August","September","October","November","December"],
$data = ['a', 'b', 'c', 'd'];
$data = array_merge([''], $data);
unset($data[0]);
$start = microtime(1);
for ($a = 0; $a < 10000; ++$a) {
$data = ['a', 'b', 'c', 'd'];
$data = array_merge([''], $data);
unset($data[0]);
}
echo (microtime(1) - $start) . "\n";
$start = microtime(1);
for ($a = 0; $a < 10000; ++$a) {
$data = ['a', 'b', 'c', 'd'];
array_unshift($data, '');
unset($data[0]);
}
echo (microtime(1) - $start) . "\n";
0.0011248588562012
0.0017051696777344