我遇到以下代码时遇到问题。它应该做的是回显cats.php,然后是example.php,但它并没有回应example.php。有什么想法可能会发生这种情况吗?
$bookLocations = array(
'example.php',
'cats.php',
'dogs.php',
'fires.php',
'monkeys.php',
'birds.php',
);
echo $bookLocations[1];
function findfile($filenumber)
{
echo $bookLocations["$filenumber"];
}
findfile(0);
答案 0 :(得分:6)
尝试更改,
echo $bookLocations["$filenumber"];
为:
echo $bookLocations[$filenumber];
编辑*要扩展Thomas的正确答案,而不是使用全局变量,您可以将方法更改为:
function findfile($filenumber, $bookLocations)
{
echo $bookLocations[$filenumber];
}
答案 1 :(得分:5)
我相信您可能还需要在函数中声明全局变量。
global $bookLocations;
答案 2 :(得分:3)
好的,有两个问题。
你的函数不知道数组$bookLocations
,你需要将它传递给你的函数:
function findfile($filenumber, $bookLocations)
您不希望将数组键包装在引号中:
wrong: $bookLocations["$filenumber"];
right: $bookLocations[$filenumber];
答案 3 :(得分:1)
"$filenumber"
中的引号将您的键变为字符串,此时数组的键都是数字。您实际上在想要访问$bookLocations["1"]
时尝试访问$bookLocations[1]
- 也就是说,1
不与"1"
相同。因此,和其他人一样,你需要摆脱键周围的引号(并检查你的变量范围)。
答案 4 :(得分:1)
function findfile($filenumber)
{
global $bookLocations;
echo $bookLocations[$filenumber];
}
优秀的开发人员通常会避免使用全局变量。而是将数组作为参数传递给函数:
function findfile($files, $filenum)
{
echo $files[$filenum];
}
答案 5 :(得分:0)
$ bookLocations超出了您的功能范围。如果你回显$ filenumber,你会看到它在范围内,因为你按值传递了它。但是,没有参考$ bookoLocations。
你应该传入$ bookLocations
声明:function findfile($ filenumber,$ bookLocations){ call:findfile(1,$ bookLocations);
您也可以将$ bookLocations声明为全局,但如果可能,应避免使用全局变量。