2016-11-18 112 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;