我有一些數組值開始我想重新索引整個陣列,使得第一個值的關鍵應該是,而不是1個零,即如何改變陣列鍵從1而不是0
默認在PHP從0即0 => a, 1=> b
數組鍵啓動,我要重新索引整個陣列從鑰匙= 1即1=> a, 2=> b, ....
我有一些數組值開始我想重新索引整個陣列,使得第一個值的關鍵應該是,而不是1個零,即如何改變陣列鍵從1而不是0
默認在PHP從0即0 => a, 1=> b
數組鍵啓動,我要重新索引整個陣列從鑰匙= 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";
和輸出:
0.0018711090087891
0.0021598339080811
0.0075368881225586
這也是很好的技術 – 2011-03-21 05:43:56
謝謝Michael Mctirnan, – 2011-03-21 05:48:54
@ user569403請記住,接受... – 2011-03-21 05:49:26
試試這個
<?php
$stack = array('a', 'b', 'c', 'd');
$i= 1;
foreach($stack as $value){
$stack2[$i] = $value;
$i++;
}
$stack = stack2;
?>
只要試試這個
$array = array("a","b","c");
array_unshift($array,"");
unset($array[0]);
這裏是我的建議:
<?php
$alphabet = array(1 => 'a', 'b', 'c', 'd');
echo '<pre>';
print_r($alphabet);
echo '</pre>';
?>
上面的例子將輸出:
Array
(
[1] => a
[2] => b
[3] => c
[4] => d
)
此解決方案比已接受的解決方案更加簡單快捷。 – anasaitali 2013-08-28 10:50:12
我更喜歡這個解決方案。 – iamkeir 2014-05-29 16:26:58
您的回覆忽略了我們不能任意選擇索引!否則,問題不在那裏! – 2014-08-02 13:23:39
裏卡多米格爾的解決方案效果最好,當你確定你的陣列,並希望第一個關鍵是1.但是,如果你的陣列已經被定義或者被放一起別處(不同的功能或循環)可以對其進行更改這樣的:
$array = array('a', 'b', 'c'); // defined elsewhere
$array = array_filter(array_merge(array(0), $array));
array_merge
會把含有1個空元件的陣列和其它陣列一起,重新索引它,然後0將移除空數組元素($array[0]
),使其爲1。
我比其他人更喜歡你的解決方案,因爲ricardo的解決方案是用於陣列的靜態定義 – 2014-06-23 10:37:16
我喜歡你的解決方案。 – Aamir 2016-04-26 09:08:09
不,這是一個錯誤的解決方案,'array_filter'將刪除所有空值,而不僅僅是合併的元素。例如,如果'$ array = array('a','b','');',你將失去第三個元素,它應該被保留。 – Fishdrowned 2017-06-07 12:49:18
啓動如果使用的範圍內,儘量此代碼:
$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)
從手動 http://php.net/manual/en/function.array.php
$firstquarter = array(1 => 'January', 'February', 'March');
print_r($firstquarter);
$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
)
是否有任何理由不能只使用基於零的數組? – Jacob 2011-03-21 05:45:06
@Jacob,例如,使用'%== 0'來定義'