我正在尝试使用变量变量,如下所示:
function keyValMyArray($nameofmyarray) {
foreach(${$nameofmyarray} as $key => $val) {
print "$key: $val<br>";
}
}
$bookPrices = Array('Catcher in the Rye' => '$2', 'Curious George' => '$4.25', 'Dracula' => '$8');
keyValMyArray('bookPrices')
这不起作用。我得到的错误是:为foreach()提供的参数无效;
任何人都知道如何在这个实例中使用变量?
答案 0 :(得分:5)
函数doesn't可以访问数组。
function keyValMyArray($nameofmyarray) {
global ${$nameofmyarray};
foreach(${$nameofmyarray} as $key => $val) {
print "$key: $val<br>";
}
}
或:
function keyValMyArray($nameofmyarray) {
foreach($GLOBALS[$nameofmyarray] as $key => $val) {
print "$key: $val<br>";
}
}
请记住,变量变量typically被认为是“不良形式”(尽管没有那么多理由解释为什么,除此之外它感觉很亲切有点像在Javascript中使用eval
。
请参阅this SO question关于人们是否认为PHP全局变形“不好”。
答案 1 :(得分:1)
foreach($GLOBALS[$nameofmyarray] as $key => $val) {
但严重.. 不使用变量。特别是在将变量名称传递给另一个函数时。它们不仅使您的代码难以阅读,而且也无法通过程序进行分析(如果您想了解原因,请询问对理论计算机科学感兴趣的人。)
除此之外,通常一个数组(可以是全局的或作为函数参数传递)更好更清晰。
顺便说一句,如果您只是想要一种调试打印数组的方法,请使用print_r($array);
答案 2 :(得分:1)
问题不是变量变量,而是您正在访问超出函数范围的变量。从函数内部,您只能访问函数的参数,所谓的superglobals和全局变量(带有语句global $global_variable;
)。
如果$ bookPrices是全局变量,那么您可以尝试:
function keyValMyArray($nameofmyarray) {
global ${$nameofmyarray};
foreach(${$nameofmyarray} as $key => $val) {
print "$key: $val";
}
}
但这不是好习惯,因为它只适用于使用全局变量的特殊情况。
也许你可以传递keyValMyArray实际变量,而不是它的名字?这将更为笼统。这样,如果您可以在调用函数的位置访问该变量,那么它也适用于局部变量:
function keyValMyArray($myarray) {
foreach($myarray as $key => $val) {
print "$key: $val";
}
}
//then use:
keyValMyArray($bookPrices);
//or
$nameOfArray = 'bookPrices');
keyValMyArray(${$nameOfArray});
祝你好运, SWilk
答案 3 :(得分:0)
$bookPrices
。请参阅变量范围手册。 http://www.php.net/manual/en/language.variables.scope.php
正如其他人所指出的,如果您需要这样做,您必须使用global
或$GLOBALS
。但这并不是最佳做法。