簡體   English   中英

使用變量變量名訪問嵌套數組

[英]Accessing nested array with variable variable name

在php中有變量變量名

如示例所示:

$a = 'hello';
$$a = 'world';

echo $hello; // outputs world

現在,我們還有嵌套數組:

$myvar = Array(
    'a' => Array('b' => 1, 'c' => 2),
    'd' => Array('e' => 3, 'f' => 4)
);

echo $myvar['a']['e']; // outputs e

問題:是否可以使用變量名訪問此類數組?

類似於以下內容:

$myvarname = 'myvar[a][e]';
echo $$myvarname;

如果是,怎么辦?

編輯:

我想做的是在循環中建立一個數組。 我對傳入的數據一無所知,因此數組可以是任意深度。

有許多輸入行的格式如下:

 /katalog/category1/subcategory1/subcategory2

我遍歷輸入行,並用“ /”分隔URL。

之后,我嘗試構建一個數組,該數組將表示所有url的結構。

 category 1
 --> subcategory 1
     --> subcategory 2
     --> subcategory 3
         --> subcategory 4
 category 2
 --> subcategory 5
 category 3
 category 4

問題的主要部分是如何將變量變量用於嵌套數組。 如果可能的話。 我包括了實際用例,因為有人問我如何在現實生活中使用它。 不需要解決我的問題-我可以自己解決該問題。

但是,可變變量用法-這才是真正的問題。

可以eval()

$myvarname = "myvar['a']['b']";
eval("\$result = \${$myvarname};");
var_dump($result);

輸出:

int(1)

演示版


但是使用eval()通常不是一個好主意,尤其是在涉及用戶輸入的情況下。 該功能允許執行任意代碼-這意味着有惡意的用戶可能在您的服務器上執行有害代碼。 這僅僅是一個POC不應在生產代碼中使用。

我建議使用遞歸來解決此問題。 我不確定100%的輸出結構,但是希望這可以為您指明正確的方向:

function createArray($pieces, $array){
  if(count($pieces) > 1){
    $key = array_shift($pieces);
    $array[$key] = createArray($pieces, isset($array[$key]) ? $array[$key] : []);
  }
  else{
    $array[$pieces[0]] = [];
  }

  return $array;
}

演示: https : //eval.in/137546

暫無
暫無

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

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