2016-11-18 115 views
0

我想執行變量的哪一部分是字符串。獲取基於變量和索引的數組值作爲字符串

這就是:

$row = array(
    'index_1' => array(
     'index_2' => 'my-value' 
    ) 
); 
$pattern = "['index_1']['index_2']"; 

我試圖做到這一點在以下幾個方面:

// #1 
$myValue = $row{$pattern}; 

// #2 
$myValue = eval("$row$pattern"); 

我也試圖把它與可變的變量的工作,但沒有成功。

任何提示,我應該怎麼做?或者myabe有另一種方式。我不知道該怎麼可能看起來數組,但我只有關鍵指標(由用戶提供)的名字,這就是:index_1index_2

+0

嘗試$行[ 'INDEX_1'] [ 'INDEX_1'];它會打印:my-value' –

+0

如果這些值是由用戶提供的,你絕對不應該使用'eval()'。你有沒有嘗試解析字符串來提取密鑰?一個簡單的例子就是修剪''[]'並在''] [''上爆炸。 – jeroen

回答

0

你可以使用eval但是這將是非常危險的,因爲你說的值來來自用戶輸入。在這種情況下,最好的辦法可能是解析字符串並提取密鑰。像這樣的東西應該工作:

$pattern = "['index_1']['index_2']"; 
preg_match('/\[\'(.*)\'\]\[\'(.*)\'\]/', $pattern, $matches); 

if (count($matches) === 3) { 
    $v = $row[$matches[1]][$matches[2]]; 
    var_dump($v); 
} else { 
    echo 'Not found'; 
} 
0

這可以幫助 -

中,如果進一步使用需要臨時變量存放$row

輸出

string(8) "my-value" 
0

如果你總是收到兩個指標則解決方案是非常簡單的,

$index_1 = 'index_1';// set user input for index 1 here 
$index_2 = 'index_2';// set user input for index 2 here 

if (isset($row[$index_1][$index_2])) { 
    $myValue = $row[$index_1][$index_2]; 
} else { 
    // you can handle indexes that don't exist here.... 
} 

如果提交的指標並不總是一副那麼這將是可能的但我需要更新我的答案。

0

由於評估是不安全的,只有當你知道你在做什麼。 $ myValue = eval(「$ row $ pattern」);將您想要的值分配給$ myValue,您可以添加使用return來讓eval返回您想要的值。 這裏是使用eval的代碼,謹慎使用它。 demo here.

<?php 
$row = array(
    'index_1' => array(
     'index_2' => 'my-value' 
    ) 
); 
$pattern = 'return $row[\'index_1\'][\'index_2\'];'; 
$myValue = eval($pattern); 
echo $myValue;