如何将数组键更改为从1而不是0开始

时间:2011-03-21 05:38:20

标签: php arrays

我有一些数组中的值我想重新索引整个数组,使得第一个值键应为1而不是零,即

默认情况下,PHP中的数组键从0开始,即0 => a, 1=> b,我想重新索引整个数组,从key = 1开始,即1=> a, 2=> b, ....

12 个答案:

答案 0 :(得分:42)

$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

答案 1 :(得分:39)

这是我的建议:

<?php
$alphabet = array(1 => 'a', 'b', 'c', 'd');
echo '<pre>';
print_r($alphabet);
echo '</pre>';
?>

以上示例将输出:

Array
(
    [1] => a
    [2] => b
    [3] => c
    [4] => d
)

答案 2 :(得分:19)

只需尝试这个

$array = array("a","b","c");
array_unshift($array,"");
unset($array[0]);

答案 3 :(得分:9)

Ricardo Miguel的解决方案在您定义数组并希望第一个键为1时效果最佳。但是如果您的数组已经定义或在其他地方(不同的函数或循环)放在一起,您可以像这样改变它:

$array = array('a', 'b', 'c'); // defined elsewhere

$array = array_filter(array_merge(array(0), $array));

array_merge将一个包含1个空元素的数组和另一个数组放在一起,重新编制索引,然后array_filter将删除空数组元素($array[0]),使其启动在1。

答案 4 :(得分:5)

来自手册 http://php.net/manual/en/function.array.php

$firstquarter = array(1 => 'January', 'February', 'March');
print_r($firstquarter);

答案 5 :(得分:2)

Array
(
    [1] => a
    [2] => b
    [3] => c
    [4] => d
)

结果:

while ( $row = $result->fetch_assoc() ){ //list of sql results
$my_array[$row["key"]]=$row["value"];
}

答案 6 :(得分: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 )

答案 7 :(得分:0)

我看到这个答案很旧,但是我的解决方案是在索引中添加+1。之所以这样做,是因为我认为它更快,更容易阅读。打印时,它将从1开始,因为0 + 1 = 1,然后是2,依此类推。

  foreach($items as $index => $item){
 echo $index+1 . $item
}

答案 8 :(得分:0)

我认为这很简单:

$x = array("a","b","c");
$y =array_combine(range(1, count($x)), $x);
print_r($y);

答案 9 :(得分:0)

在php中使用此

 'Month'=>  [ 1  => "January","February","March","April","May","June","July","August","September","October","November","December"],

答案 10 :(得分:0)

$data = ['a', 'b', 'c', 'd'];
$data = array_merge([''], $data);
unset($data[0]);

我发现,在 PHP 7.1+ 版本上,这会比公认的解决方案性能稍好一些。

基准代码:

$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";

脚本执行时间(PHP 7.4):

0.0011248588562012 
0.0017051696777344 

这些基准的差异会随着数组值数量的增加而增加。

答案 11 :(得分:-2)

试试这个

<?php
$stack = array('a', 'b', 'c', 'd');
$i= 1;
foreach($stack as $value){
    $stack2[$i] = $value;
    $i++;
}
$stack = stack2;
?>