2011-08-26 179 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"; 
}