[英]How do I efficiently locate key-value pairs in a multi-dimensional PHP array?
[英]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.