2013-09-25 52 views
0

我發現了怪異輸出我發現了怪異輸出在PHP array_reverse()函數

<?php 
    $a = array('1000'=>1,2,3,4,'1001'=>5); 
    var_dump(array_reverse($a)); 
?> 

和我得到這樣的輸出:

array (size=4) 
0 => int 4 
1 => int 3 
2 => int 5 
3 => int 1 

值2是失蹤。任何人都可以解釋代碼?

+0

首先看看你實際創建的數組 –

回答

3
$a = array('1000'=>1,2,3,4,'1001'=>5); 

裝置

create key entry 1000 with value 1 
create key entry 1000+1 with value 2 
create key entry 1000+2 with value 3 
create key entry 1000+3 with value 4 

然後

create key entry 1001 with value 5 
已經存在(具有值2)

,所以是覆蓋用新值

2

您已經有與你的「問題」原始數組。如果您print_r($a);您將看到:

Array 
(
    [1000] => 1 
    [1001] => 5 
    [1002] => 3 
    [1003] => 4 
) 

而且你可以看到你缺少一個值,因爲你覆蓋它:

Index 1000 set value 1. 
Index 1001 set value 2. 
Index 1002 set value 3. 
Index 1003 set value 4. 
Index 1001 set value 5. <--- overwritten index 1001 
+0

謝謝,現在我明白了 – Nambi

1

您的代碼工作正確,你開始與指數第一個值(1000 )告訴PHP從這個設置下鍵例如,如果我們打印您陣列將是這樣的:

Array 
(
    [1000] => 1 
    [1001] => 5 
    [1002] => 3 
    [1003] => 4 
) 

和數組反向產生這樣的:

Array 
(
    [0] => 4 
    [1] => 3 
    [2] => 5 
    [3] => 1 
) 

保持與第二參數的按鍵:

print_r(array_reverse($a,true)); 

Array 
(
    [1003] => 4 
    [1002] => 3 
    [1001] => 5 
    [1000] => 1 
) 
0

當然值2中缺失。看這個

$a = array('1000'=>1,2,3,4,'1001'=>5); 

作爲下一個值值1之後不具有鍵,所以默認爲值1的下一個鍵所以應該是這樣的 陣列(「1000」 => 1, '1001'=> 2,'1002'=> 3,'1003'=> 4) 最後一個值是5,它已經有了鍵值1001.所以它會覆蓋之前的值。結果值2被覆蓋值5