У меня есть значения в каком-то массиве, я хочу повторно индексировать весь массив таким образом, чтобы первый ключ значения был равен 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; ?>