簡體   English   中英

如何使用變量鍵從PHP多維數組返回值?

[英]How do I return a value from a PHP multi-dimensional array using a variable key?

我在外部化創建函數時僅使用鍵從多維數組返回值時遇到了麻煩。

具體來說,以下代碼在頁面內聯時將起作用:

<?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新手,所以如果其中包括明顯的錯誤,請原諒我,但我一直到處搜索該行為的討論,但沒有發現。

所有幫助表示贊賞。

我認為您需要看看PHP的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變量基本上也是如此。

這是可變范圍的問題,有關可變范圍的更多詳細信息,請參見Brad Christie的答案

對於您的示例,您需要將數組傳遞給函數或在函數內部創建它。 嘗試:

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

您遇到了這個問題,因為您覆蓋了$ mystring變量,即使它匹配。 發送數組作為參數。 您的函數未知。如果變量匹配,則只需使用break

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;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM