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

Khu*_*jaz 34 php arrays

我有一些数组中的值我想重新索引整个数组,使得第一个值键应该是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)

  • 你的回复忽略了我们不能随意选择索引!否则,问题不存在! (4认同)
  • 该解决方案比公认的解决方案更容易,更快捷. (3认同)

Sha*_*eer 21

试试吧

$array = array("a","b","c");
array_unshift($array,"");
unset($array[0]);
Run Code Online (Sandbox Code Playgroud)


kas*_*mir 9

当您定义数组并希望第一个键为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_filter`将删除所有空值,而不仅仅是合并元素.例如,如果`$ array = array('a','b','');`,您将丢失应保留的第3个元素. (2认同)

Xin*_*Guo 7

$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)


axi*_*m82 5

如果您使用的是范围,请尝试以下代码:

$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)