2017-02-13 60 views
6

我有值的數組:爲什麼PHP的數組值鬆動?

$array1 = array('Boss', 'Lentin', 'Endless'); 
print_r ($array); 

結果將是:

Array ([0] => Boss [1] => Lentin [2] => Endless 

這沒關係。

但是,如果我用鍵添加兩個元素到這個數組中,「Boss」元素將會丟失。

$array2 = array("1"=>'Doctor','Boss', 2=>'Lynx', 'Lentin', 'Endless'); 
print_r ($array2); 

結果將是:

Array ([1] => Doctor [2] => Lynx [3] => Lentin [4] => Endless) 
//Where is "BOSS"??? 

爲什麼?

+0

語法是非常重要的。所以當事情不起作用時,請查看錯誤日誌! – RiggsFolly

+0

沒有任何錯誤和語法問題。 – Weltkind

+0

您將需要創建一個二維數組來存儲多個值。 –

回答

8

當PHP創建陣列,在索引2中設定索引1 DoctorBoss,但2=>'Lynx'導致PHP指數重寫2和在其設置Lynx

您可以在設置索引或使用索引後對其進行設置。例如像

$array2 = array("1"=>'Doctor', 2=>'Lynx', 'Boss', 'Lentin', 'Endless'); 
// or 
$array2 = array("1"=>'Doctor', 2=>'Boss', 3=>'Lynx', 'Lentin', 'Endless'); 
3

你的問題是索引鍵

$array2 = array("1"=>'Doctor','Boss', 2=>'Lynx', 'Lentin', 'Endless'); 
print_r ($array2); 

這是因爲,索引1已經是醫生,老闆會第二次,這將是山貓替換其具有相同的索引2,老闆將被替換。

我希望我很清楚。

5

當創建$陣列,「老闆」將首先被存儲在索引2 (Array([2] =>'Boss')稍後由「山貓」

3

這是預期行爲從PHP覆蓋(參見http://php.net/manual/en/language.types.array.php#example-57)。如果您需要陣列中的所有值並且不需要使用密鑰,我推薦使用array_push($array $value)。否則,你應該添加所有的值與他們的鑰匙,並記住,對於PHP 1"1"true是相同的值,因此他們將相互覆蓋。

+0

它與手冊中的不一樣。 – Weltkind

+0

你的意思是哪個手冊?在我發佈的鏈接中聲明:「由於上例中的所有鍵都被轉換爲1,所以每個新元素的值將被覆蓋,並且最後一個分配的值」d「是唯一剩下的。」 ==>在你的例子中,你首先設置'「1」=>'Doctor'',所以密鑰被強制爲'1'。下一個沒有鍵,所以只有前一個值增加到'2'。你繼續設置'2 =''Lynx'',但'Boss'鍵已經使用了'2'鍵,這就是爲什麼它被替換爲新值'Lynx'的原因。最後,陣列中完全沒有'Boss'。 –

2

array()是一個具有代表文字數組的動態參數的構造。將給定值分配給陣列結構按順序完成即從左到右逐個地進行。在您的示例:

  1. Doctor被分配到索引1
  2. Boss被分配給索引2
  3. Lynx覆蓋索引2
  4. LentinEndless被分別分配給索引3和4。
1

哎@Weltkind首先,我建議你閱讀 「http://php.net/manual/en/language.types.array.php」,

現在來到你的答案在PHP中數組鍵可以是字符串或整數,如果你不這樣做然後提到密鑰 默認整數被設置,並且下一個數組密鑰的值取決於前一個數組整數密鑰的意思是

next array key =前一個整數鍵+ 1;

在PHP陣列相同的密鑰值將被覆蓋相同的密鑰

現在,讓我們與您的數組2明白:

<?php 
$array2 = array("1"=>'Doctor','Boss', 2=>'Lynx', 'Lentin', 'Endless'); 

1)將與主要的開始你的數組「1」所以

所以對於第一個鍵值是[1] =>'Doctor'

當前陣列等:陣列([1] => '醫生')

現在下一關鍵字=先前的整數鍵(即1)+ 1 = 2;

2)爲第二密鑰值是[2] => '老闆'

當前陣列等:陣列([1] => '醫生',[2] => '老闆')

3)下一個鍵=上一個整數鍵(即2)+ 1 = 3它將攜帶 到下一個鍵,但下一個鍵是[2] =>'Lynx',如您在 鍵[2]該值將被值'BOSS'覆蓋爲'Lynx';當前 陣列等:陣列([1] => '醫生',[2] => '山貓')

現在我們有下一個鍵是[3]

4),用於下一個值的關鍵是[3] =>'Lentin'

當前數組像:array([1] =>'Doctor',[2] =>'Lynx',[3] => ' );

現在下一個鍵=上一個整數鍵(即3)+ 1 = 4;

5),用於下一個值的鍵是[4] => '無盡的'

當前陣列等:陣列([1] => '醫生',[2] => '山貓',[3 ] => 'Lentin',[4] =>'無盡');

,這就是爲什麼最後的數組類似於如下:

array(
     [1] => 'Doctor', 
     [2] => 'Lynx', 
     [3] => 'Lentin', 
     [4] => 'Endless' 
    ); 
相關問題