Как изменить ключ массива, чтобы начать с 1 вместо 0

У меня есть значения в каком-либо массиве. Я хочу повторно индексировать весь массив таким образом, чтобы первый ключ значения был равен 1 вместо нуля, т.е.

По умолчанию в PHP ключ массива начинается с 0. i.e. 0 => a, 1=> b, я хочу переиндексировать весь массив, чтобы начать с key = 1 i.e 1=> a, 2=> b, ....

Ответ 1

$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

Ответ 2

Вот мое предложение:

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

Вышеприведенный пример выводит:

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

Ответ 3

Просто попробуйте это

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

Ответ 4

Решение 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.

Ответ 6

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

Ответ 7

Если вы используете диапазон, попробуйте этот код:

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

Ответ 8

Я вижу, что этот ответ очень старый, но мое решение для этого - добавить +1 в ваш индекс. Я сделаю это, потому что я думаю, что это намного быстрее и легко читается. Когда вы распечатаете это, оно начнется с 1, потому что 0 +1 = 1, затем 2 и т.д.

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

Ответ 9

array_unshift ($ массив, ""); снята с охраны ($ массив [0]);

Ответ 10

попробуйте это

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