Как изменить ключ массива, чтобы начать с 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.
Ответ 5
из руководства
http://php.net/manual/en/function.array.php
$firstquarter = array(1 => 'January', 'February', 'March');
print_r($firstquarter);
Ответ 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;
?>