【问题标题】:How can I use a string to get a value from a multi dimensional array?如何使用字符串从多维数组中获取值?
【发布时间】:2009-07-02 03:39:13
【问题描述】:
说这是我的字符串
$string = 'product[0][1][0]';
我怎样才能单独使用该字符串来实际从数组中获取值,就像我使用过这个一样:
echo $array['product'][0][1][0]
我已经用这个正则表达式 (/\[([0-9]+)\]/) 弄乱了 preg_match_all,但我无法想出令人满意的东西。
有什么想法吗?提前致谢。
【问题讨论】:
标签:
php
arrays
multidimensional-array
【解决方案1】:
您可以使用preg_split 来获取各个数组索引,然后使用循环来一一应用这些索引。这是一个使用粗略的 /[][]+/ 正则表达式将字符串拆分到找到一个或多个方括号的示例。
(将[][] 结构读作[\]\[],即匹配右方括号或左方括号的字符类。反斜杠是可选的。)
function getvalue($array, $string)
{
$indices = preg_split('/[][]+/', $string, -1, PREG_SPLIT_NO_EMPTY);
foreach ($indices as $index)
$array = $array[$index];
return $array;
}
【解决方案2】:
这很 hacky,但这会奏效。也不知道你的数组结构会发生多大的变化,如果你变得太动态,这将不起作用。
$array = array();
$array['product'][0][1][0] = "lol";
$string = 'product[0][1][0]';
$firstBrace = strpos( $string, "[" );
$arrayExp = substr($string, $firstBrace );
$key = substr( $string, 0, $firstBrace );
echo $arrayExp, "<br>";
echo $key, "<br>";
$exec = "\$val = \$array['".$key."']".$arrayExp.";";
eval($exec);
echo $val;
【解决方案3】:
使用eval()怎么样?
<?php
$product[0][1][0] = "test";
eval ("\$string = \$product[0][1][0];");
echo $string . "\n";
die();
?>