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

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

По умолчанию в PHP ключ массива начинается с 0. ie 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"; с $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 

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

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

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

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

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

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

Решение Ricardo Miguel работает лучше всего, когда вы определяете свой массив и хотите, чтобы первый ключ был равным 1. Но если ваш массив уже определен или объединяется в другое место (другая функция или цикл), вы можете изменить его следующим образом:

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

array_merge поместит массив, содержащий один пустой элемент и другой массив, повторно проиндексирует его, затем array_filter удалит пустые элементы массива ( $array[0] ), запустив его в 1.

из руководства http://php.net/manual/en/function.array.php

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

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

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

попробуй это

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