2015-06-04 101 views
7

據我所知,在associative arrays,如果沒有設置鍵,它會自動設置。但它似乎沒有意義在這種情況下:PHP索引關聯數組如何?

$a = array('1' => 'One', '3', '2' => 'Two'); 
print_r($a); 

輸出:

Array ([1] => One [2] => Two) 

那麼,是 '3'?

+0

你是從哪裏得到的?關聯數組僅用於設置我們自己的關鍵字,而不是其默認關鍵字 –

+0

我從[link](http://php.net/manual/en/function.array.php)獲得此信息。它說:「當省略索引時,會自動生成一個整數索引,從0開始。如果索引是一個整數,則下一個生成的索引將是最大整數索引+1。 – Jane

+0

請使用此代碼並檢查它'$ a = array('1'=>'One','3','3'=>'Two'); 的print_r($ A);' –

回答

4

在用戶定義的數組要分配鍵手動將陣列結構作爲

array(1 => 'One',3, 2 => 'Two');//[1] => One [2] => 3 [2] => Two 

這裏,我們有兩個相同指數和按DOCS其提到最後覆蓋第一

語法「index => values」,用逗號分隔,定義索引和值。索引可以是字符串或整數類型。當省略索引時,會自動生成一個整數索引,從0開始。如果索引爲整數,則下一個生成的索引將爲最大整數索引+ 1.

請注意,當定義兩個相同的索引時,覆蓋第一個。

爲了過濾這種情況下,你可以簡單地做一些變化

array(1 => 'One',2 =>'Two',3) // array ([1] => One [2] => Two [3] => 3) 
array(3,1 => 'One',2 =>'Two') //array ([0] => 3 [1] => One [2] => Two) 
array(1 => 'One',2 => 3 ,3 =>'Two')// array([1] => One [2] => 3 [3] => Two) 

DOCS CHECK PARAMETERS

+0

不客氣....檢查我更新的答案@Jane –

+0

嘿@Uchiha,還有一個問題。在處理數組之前,如何去除沒有像上面那樣關聯的鍵的值? – Jane

+0

對不起,你可以請你顯示你的預期輸出。 –

3

在PHP中關鍵是可選的。如果沒有指定,PHP將使用最大的先前使用的整數鍵

一樣的增量,如果: -

$a = array(1 => 'One', 3, 3 => 'Two'); 
var_dump($a); 

輸出: -

array(3) { 
    [1]=> 
    string(3) "One" 
    [2]=> 
    int(3) 
    [3]=> 
    string(3) "Two" 
} 

這裏是第二個值之一從以前的價值增值,即2

現在

說數組是: -

$a = array('1' => 'One', '3', '3' => 'Two'); 
var_dump($a); 

輸出將

array(3) { 
    [1]=> 
    string(3) "One" 
    [2]=> 
    string(1) "3" 
    [3]=> 
    string(3) "Two" 
} 

這裏還這裏第二值之一是從以前的值即2增量。

現在第三種情況: -

如果陣列是: -

$a = array('1' => 'One', '1' => 'two' , '1' => 'Three'); 
var_dump($a); 

輸出將: -

array(1) { 
    [1]=> 
    string(5) "Three" 
} 

這是因爲關聯數組保持值作爲地圖以及如果鍵是本它在這種情況下覆蓋值1被覆蓋2次,結果是三個

在y我們的情況: -

$a = array('1' => 'One', '3', '2' => 'Two'); 
print_r($a); 

輸出是

Array 
(
    [1] => One 
    [2] => Two 
) 

這是因爲: -

第一鍵映射將: - '1' => 'one'

再次

PHP將保持第二值爲 '2' => '3'

現在,作爲在陣列「2」被分配爲「二」,值成爲

'2' => 'Two'這意味着它覆蓋。

+0

哦,我明白了!謝謝! – Jane

0

@Uchiha是正確的,只是作爲一個包括對這個問題的答案,如果你想避免這個問題,保持一個數組的成員在最後


$a = array('1' => 'One', '3', '2' => 'Two'); 

(這是沒有指定的鍵)將傾

array (size=2) 
    1 => string 'One' (length=3) 
    2 => string 'Two' (length=3) 


並保持未定義鍵成員最後

$a = array('1' => 'One', '2' => 'Two', '3'); 

將傾

array (size=3) 
    1 => string 'One' (length=3) 
    2 => string 'Two' (length=3) 
    3 => string '3' (length=1) 


將避免你所面對的問題。