PHP关联数组

时间:2011-08-26 13:47:19

标签: php

PHP

<?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

任何人都可以解释一下吗?

7 个答案:

答案 0 :(得分:5)

好的,所以每个人都指出你需要引用你的字符串,但这不是真正的问题。

(你的代码现在没有抛出错误的原因是因为你忘记引用的字符串被视为PHP“裸字符串” - 基本上是一个未定义的常量,其名称用作值,你不应该使用/依赖于此。)

现在看看真正的问题:看起来你已经将$ truck定义为代码中的字符串,所以当你尝试读取/写入它就好像它是一个关联数组时,你真的读了/在最初定义的字符串中写入第一个字符(您正在使用的字符串键转换为int)。由于最后一次分配是$ truck ['Dodge'] =“Ram”,$ truck中的第一个字符变为“R”,这就是你在输出中看到的内容。

你应该(并且这个案例需要)在开始使用它之前将$ truck定义为数组:

$truck = array();

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

更好的是,对于最佳实践,您应该为第一个$ truck(字符串)和第二个$ truck(数组)使用不同的变量名称,这样就不会混淆:

// 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 />";

答案 1 :(得分:2)

你需要围绕字符串文字的引号。 E.g:

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

一个好主意是启用错误报告,因此php解释器会告诉您这些问题。将此行粘贴在脚本的顶部(<?php之后的下一个):

error_reporting(E_ALL);

答案 2 :(得分:2)

您似乎使用常量Tundra TitanRam而不是字符串。您是否在代码中的其他位置定义了这些常量?

答案 3 :(得分:1)

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

我认为这是一个语法错误。

答案 4 :(得分:1)

你必须把你的字符串放在引号内:

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

答案 5 :(得分:0)

我不知道该帖子是否已被Stack Overflow编辑或丢失了但是您的值未包含在单引号中..

另外,只是一条建议;只有单引号字符串才需要连接,你可以将变量包装在大括号中以保存0.00001毫秒:)

答案 6 :(得分: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";
}