2011-03-21 26 views
24

我有一些數組值開始我想重新索引整個陣列,使得第一個值的關鍵應該是,而不是1個零,即如何改變陣列鍵從1而不是0

默認在PHP從0即0 => a, 1=> b數組鍵啓動,我要重新索引整個陣列從鑰匙= 1即1=> a, 2=> b, ....

+3

是否有任何理由不能只使用基於零的數組? – Jacob 2011-03-21 05:45:06

+0

@Jacob,例如,使用'%== 0'來定義''和'​​'標籤的for循環。 '$ i [0]'出發''。無論如何,這就是我最終在這個問題:) – JoshP 2013-12-12 15:19:42

回答

33
$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 
+0

這也是很好的技術 – 2011-03-21 05:43:56

+0

謝謝Michael Mctirnan, – 2011-03-21 05:48:54

+0

@ user569403請記住,接受... – 2011-03-21 05:49:26

-2

試試這個

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

只要試試這個

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

這裏是我的建議:

<?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

此解決方案比已接受的解決方案更加簡單快捷。 – anasaitali 2013-08-28 10:50:12

+0

我更喜歡這個解決方案。 – iamkeir 2014-05-29 16:26:58

+4

您的回覆忽略了我們不能任意選擇索引!否則,問題不在那裏! – 2014-08-02 13:23:39

7

裏卡多米格爾的解決方案效果最好,當你確定你的陣列,並希望第一個關鍵是1.但是,如果你的陣列已經被定義或者被放一起別處(不同的功能或循環)可以對其進行更改這樣的:

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

$array = array_filter(array_merge(array(0), $array)); 

array_merge會把含有1個空元件的陣列和其它陣列一起,重新索引它,然後0將移除空數組元素($array[0]),使其爲1。

+0

我比其他人更喜歡你的解決方案,因爲ricardo的解決方案是用於陣列的靜態定義 – 2014-06-23 10:37:16

+0

我喜歡你的解決方案。 – Aamir 2016-04-26 09:08:09

+2

不,這是一個錯誤的解決方案,'array_filter'將刪除所有空值,而不僅僅是合併的元素。例如,如果'$ array = array('a','b','');',你將失去第三個元素,它應該被保留。 – Fishdrowned 2017-06-07 12:49:18

1

啓動如果使用的範圍內,儘量此代碼:

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