2011-08-26 193 views
1

PHPPHP關聯數組

<?php 
$truck['Toyota']=Tundra; 
$truck['Nissan']=Titan; 
$truck['Dodge']=Ram; 

print "<br />Toyota makes the".$truck['Toyota']."<br />"; 
print "Nissan makes the".$truck['Nissan']."<br />"; 
print "Dodge makes the".$truck['Dodge']."<br />"; 
?> 

我學習PHP通過教程: 關聯數組是將密鑰與值相關聯的陣列。

而且,在瀏覽器中查看時...

Toyota makes the Tundra 
Nissan makes the Titan 
Dodge makes the Ram

並非如此! 我得到:

Toyota makes theR 
Nissan makes theR 
Dodge makes theR

任何人都可以解釋嗎?

+3

永遠不要看瀏覽器屏幕。什麼是* HTML源*你有? –

回答

1
$truck['Toyota']="Tundra"; 
$truck['Nissan']="Titan"; 
$truck['Dodge']="Ram"; 

我覺得它的語法錯誤。

+1

與語法錯誤,你會得到完全不同的輸出 –

+0

發佈的代碼不包含任何語法錯誤。只有邏輯/錯誤的練習錯誤。 – afuzzyllama

2

你需要圍繞字符串引號。例如:

<?php 
$truck['Toyota'] = "Tundra"; 
$truck['Nissan'] = "Titan"; 
$truck['Dodge'] = "Ram"; 

一個好主意是啓用錯誤報告,所以您會被php解釋器告知這些問題。堅持這條線在你的腳本的頂部(<?php後下一個):

error_reporting(E_ALL); 
1

你必須把你的字符串引號內:

$truck['Toyota']='Tundra'; 
$truck['Nissan']='Titan'; 
$truck['Dodge']='Ram'; 
2

看起來你正在使用常量TundraTitanRam而不是字符串。你有沒有在代碼中的其他地方定義這些常量?

0

如果帖子已被堆棧溢出編輯或它失去了他們,但你的價值不是包裹在單引號,我不知道..

而且,只是一個忠告;串聯只需要在單引號字符串,你可以包裝你的變量大括號,以節省0.00001毫秒:)

+2

將字符串變量插值編譯爲級聯; ''foo $ bar baz「'和'」foo「之間會有* no *運行時性能差異。 $ bar。 「baz」'。就行爲和性能而言,這兩個表達式是100%相等的。 – cdhowie

+0

我一直認爲讀取包含在大括號中的變量的過程加快了輸出速度(不可能有小的改進,但改進都不會少)如果你這麼說,也許這已經改變了? –

+0

爲什麼downvote? –

5

好吧,所有人都指出,你需要引用你的字符串,但這不是真正的問題。

(您的代碼現在沒有拋出錯誤的原因是因爲您忘記引用的字符串被視爲PHP「裸露的字符串」 - 基本上是一個未定義的常量,其名稱用作值,您不應該使用/依靠此。)

現在的真正問題:它看起來像你已經定義$卡車是一個字符串進一步在你的代碼,所以當你嘗試讀/寫它,就好像它是一個關聯數組,你真的讀/寫了最初定義的字符串中的第一個字符(你正在使用的字符串鍵被轉換爲int)。由於上次作業是$ truck ['Dodge'] =「Ram」,所以$ truck中的第一個字符變成了「R」,這就是您在輸出中看到的內容。

你應該(而且這種情況下需要)你開始使用它就像一個之前定義$卡車作爲數組:

$truck = array(); 

$truck['Toyota'] = "Tundra"; 
$truck['Nissan'] = "Titan"; 
$truck['Dodge'] = "Ram"; 

更妙的是,最佳實踐,您應該爲使用不同的變量名第一$卡車(串)和第二$卡車(陣列),所以它不是混亂:

// some code that I imagine comes before your example 
$truck = "Ford F150"; 
// ... 

$trucks = array(); 

$trucks['Toyota'] = "Tundra"; 
$trucks['Nissan'] = "Titan"; 
$trucks['Dodge'] = "Ram"; 

print "<br />Toyota makes the".$trucks['Toyota']."<br />"; 
print "Nissan makes the".$trucks['Nissan']."<br />"; 
print "Dodge makes the".$trucks['Dodge']."<br />"; 
+0

這似乎正是發生了什麼事情。 – afuzzyllama

+0

感謝您的幫助 - 讚賞 – Redcolonel

0

啓用錯誤報告並減少代碼更快地修復,如果你已經找到了錯誤:

<?php 
# display errors and show all warnings and errors, that's helpful: 
ini_set('display_errors', 1); error_reporting(~0); 

$truck['Toyota']=Tundra; 
$truck['Nissan']=Titan; 
$truck['Dodge']=Ram; 

echo "<br />\n"; 

# when doing the same thing multiple times, take foreach: 
foreach ($truck as $manufacturer => $model) 
{ 
    echo $manufacturer, ' makes the ', $model, ".<br />\n"; 
}