2013-10-11 95 views
1

我有一個數組名爲$行這樣的字符串多維數組:訪問與數組語法

[multifield] => Array 
(
    [pipelines_users] => Array 
    (
     [users_id] => Array 
     (
      [0] => 327 
      [1] => 123 
     ) 
    ) 
) 

,我想訪問users_id數組,但只有字符串multifield[pipelines_users][users_id]

但呼應$row[$string]使用整個字符串作爲鍵,不解析方括號的數組表示法。

我試過:$row{$string}和其他幾個不正確的語法,沒有運氣。

字符串數組表示法將有可變鍵,所以我不能在這裏硬編碼。

+0

如果你不想使用'eval',那麼你將不得不爲此使用引用 - 分割字符串成的單層鍵,通過它的鍵獲取參考第一級別的元素,然後使用該引用獲取下一級元素等。 – CBroe

+0

如果要訪問數組的單個元素,則應該將整個字符串拆分爲多個子字符串。 – briosheje

回答

2

沒有eval的一種實現方法是將字符串分開並循環通過鍵,檢查它們的存在,逐漸縮小數組的範圍。

$row = array("multifield" => Array 
(
    "pipelines_users" => Array 
    (
     "users_id" => Array 
     (
      0 => 327 
      ,1 => 123 
     ) 
    ) 
)); 
$str = 'multifield[pipelines_users][users_id]'; 
$parts = preg_split('#[[\]]+#',$str);//Convert string into array of keys: ('multifield','pipelines_users','users_id','') 
$ret = $row; 
foreach($parts as $key) 
{ 
    if(isset($ret[$key])) $ret = $ret[$key];//When the key is found, we push $ret further down the array, for the next key search 
} 
var_dump($ret); //array(2) { [0]=> int(327) [1]=> int(123) } 
+0

當然。這是一個非常簡單的方法,謝謝。 – user2173785

+0

@ user2173785不用擔心,很高興有幫助。 – SmokeyPHP

+0

對不起,實際上我將有多個使用這些鍵的數組,因此需要使用所有鍵訪問數組,因此這對我來說不起作用。 – user2173785