如何使用变量键从PHP多维数组返回值?

时间:2011-03-23 06:03:26

标签: php

我无法在外部创建函数时使用键从多维数组返回值。

具体来说,以下代码在页面内联时可以使用:

<?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菜鸟,所以请原谅我,如果这包括我的一个明显的错误,但我已经搜索了所有这些行为的讨论,但没有找到。

所有帮助表示赞赏。

3 个答案:

答案 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;

}