我有一个数组$AR
我有一个字符串"set[0][p1]"
当给出这个字符串时,我需要在$AR['set'][0]['p1']
我对该字符串有完全的控制权,所以我不必担心注射和东西,我可以肯定它的格式很好。我无法将p1置于'"set[0]['p1']"
答案 0 :(得分:3)
检查parse_str()
:
parse_str('set[0][p1]', $AR);
哦,你想 访问 数组的索引......这是我的看法:
getValue($AR, array('set', 0, 'p1'));
或者如果你真的必须使用原始字符串表示:
parse_str('set[0][p1]', $keys);
getValue($AR, $keys);
免责声明:我没有对此进行测试,您可能需要在某处使用array_keys()
。
辅助函数:
function getValue($array, $key, $default = false)
{
if (is_array($array) === true)
{
settype($key, 'array');
foreach ($key as $value)
{
if (array_key_exists($value, $array) === false)
{
return $default;
}
$array = $array[$value];
}
return $array;
}
return $default;
}
我会避免重新解决这个问题。
答案 1 :(得分:3)
我的尝试,它应该能够处理字符串中任意数量的[]
:
要分割字符串,您可以使用preg_split
。
$parts = preg_split('%\[?(\w+)\]?%', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
(更多)完整代码:
function get_value($string, $array) {
$parts = preg_split('%\[?(\w+)\]?%', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
foreach($parts as $part) {
$array = $array[$part];
}
return $array;
}
$array = array('set'=>array(array('p1'=>'foo')));
$string = "set[0][p1]";
echo get_value($string, $array); // echoes 'foo'
我将错误处理留给您;)
答案 2 :(得分:2)
也许这很疯狂,但你考虑过提取物吗?它可能不是最快的解决方案,但它具有需要最少代码的新颖性。
extract( $AR );
$target = eval("\$set[0]['p1']");
主要区别(就输入而言)是你需要在字符串中预先添加'$',并确保括号内有引号。
主要的好处是,你想要完成的事情变得非常明显,并且你正在使用两个本机PHP函数。这两者都意味着那些不熟悉您的系统的解决方案将更具“可读性”。
哦,你只使用两行代码。
答案 3 :(得分:0)
你需要类似的东西。我不是100%关于“[”和“]”括号,因为我以前从来没有对它们运行正则表达式...如果它错了可以有人纠正我吗?
foreach(preg_split('/[\[\]]/', "set[0][p1]") as $aValue) {
$AR[$aValue[0]][$aValue[1]][$aValue[2]] = '?';
}