2010-11-08 59 views
0

嗨我有一個數組,我需要有序地更改鍵,但不要更改值的順序。例如php數組重新填充鍵

$a = array (
0=>'h', 
1=>'blabla', 
2=>'yes' 
); 

我用

unset($a[1]); 

,但我需要的鍵重新啓動計算鍵 0,1,2 ...... etccc 所以我不結了:

array(
0 => 'h', 
2 => 'yes' 
) 

但它應該會返回:

array(
0 => 'h', 
1 => 'yes' 
) 

回答

3

就可以呼叫array_values

$a = array (
0=>'h', 
1=>'blabla', 
2=>'yes' 
); 

unset($a[1]); 

$a = array_values($a); 

var_dump($a); 
/* 
array(2) { 
    [0]=> 
    string(1) "h" 
    [1]=> 
    string(3) "yes" 
} 
*/ 
5

您需要在陣列上應用array_values以重新編制索引。

$a = array_values($a); 

獎勵:如果您還需要訂購你的價值觀,你可以使用sort,它也將重新索引您的陣列。

注:通過使用任何array_values或排序,你將失去你可能有的任何字符串鍵。

2

您還可以使用array_splice()而不是取消設置(),它會自動重新索引數組元素:

$a = array (
0=>'h', 
1=>'blabla', 
2=>'yes' 
); 

array_splice($a,1,1); 

var_dump($a); 
+0

但是,這是一個有點矯枉過正。還有一些其他功能會這樣做。例如array_merge(爲他的情況)。 – 2010-11-08 13:00:49

+1

與unset()之後立即執行array_values()相比,它確實是過度殺毒嗎? – 2010-11-08 13:02:17

+0

假設他想要消除一個元素,我猜它可能會快一點array_splice,但我沒有認真的證據。另外PHP並不完全是速度應該是優先考慮的語言:)。我會給你一個+1組合解決方案來解除和重新索引。 – 2010-11-08 13:05:26