我无法在外部创建函数时使用键从多维数组返回值。
具体来说,以下代码在页面内联时可以使用:
<?php
foreach ($uiStringArray as $key) {
$keyVal = $key['uid'];
if($keyVal == 'global001') echo $key['uiString'];
}
?>
但是,如果我将代码外部化为函数,就像这样:
function getUIString($myKey) {
// step through the string array and find the key that matches the uid,
// then return uiString
$myString = "-1";
foreach ($uiStringArray as $key) {
$keyVal = $key['uid'];
if($keyVal == 'global001') {
$myString = $key['uiString'];
}
}
return $myString;
}
然后像这样称呼它:
<?php getUIString('global001'); ?>
它总是返回-1,即使我在函数中使用显式键而不是变量也会这样做。我无法理解为什么它在内联工作,但作为一个函数失败。
我是一个相对的PHP菜鸟,所以请原谅我,如果这包括我的一个明显的错误,但我已经搜索了所有这些行为的讨论,但没有找到。
所有帮助表示赞赏。
答案 0 :(得分:3)
我想你需要看看PHP's Variable Scope。问题是PHP不是其他语言的典型,其中在函数外部定义的变量是可见的。您需要使用$GLOBALS
变量之类的内容或声明变量global来访问它。
为了更好地说明,请注意以下内容:
$foo = "bar";
function a(){
// $foo is not visible
echo $foo;
}
function b(){
global $foo; // make $foo visible
echo $foo;
}
function c(){
// acccess foo within the global space
echo $GLOBALS['foo'];
}
在这种情况下,$uiStringArray
变量的基本相同。
答案 1 :(得分:1)
这是变量范围的问题,有关变量范围的详细信息,请参阅Brad Christie的answer。
至于您的示例,您需要将数组传递给函数或在函数内创建它。尝试:
function getUIString($myKey, $uiStringArray = array()) {
// step through the string array and find the key that matches the uid,
// then return uiString
$myString = "-1";
foreach ($uiStringArray as $key) {
$keyVal = $key['uid'];
if($keyVal == 'global001') {
$myString = $key['uiString'];
break;
}
}
return $myString;
}
使用
调用该函数<?php getUIString('global001', $uiStringArray); ?>
答案 2 :(得分:0)
你遇到了这个问题,因为即使它匹配,你也会覆盖你的$ mystring变量。将您的数组作为参数发送。您的函数未知。您只需使用break if变量匹配
function getUIString($myKey, $uiStringArray=array()) { // step through the string array and find the key that matches the uid, // then return uiString $myString = "-1"; foreach ($uiStringArray as $key) { $keyVal = $key['uid']; if($keyVal == 'global001') { $myString = $key['uiString']; break; } } return $myString; }