Php 将字符串分解为关联数组键

Php 将字符串分解为关联数组键,php,Php,我有一组格式类似于“a.B.C”的字符串,可以有不同的“深度”。也就是说,其中一个可能只是“A”,也可能是“A.B.C.D” 我希望能够将其转换为关联数组的键。所以“A”可以翻译成 $var["A"] = $val; “A.B”可以翻译成 $var["A"]["B"] = $val; 使用递归函数并经过&reference $str = "A.B.C" ; $letters = explode(".", $str); $result = array() ; function goDee

我有一组格式类似于“a.B.C”的字符串,可以有不同的“深度”。也就是说,其中一个可能只是“A”,也可能是“A.B.C.D”

我希望能够将其转换为关联数组的键。所以“A”可以翻译成

$var["A"] = $val;
“A.B”可以翻译成

$var["A"]["B"] = $val;

使用递归函数并经过
&reference

$str = "A.B.C" ;

$letters = explode(".", $str);

$result = array() ;

function goDeep(&$array, $letters, $level){
  if ($level >= count($letters)){
    $array = "Your value here" ;
    return ;
  }

  $array[$letters[$level]] = array() ;
  goDeep($array[$letters[$level]], $letters, ++$level);
}

goDeep($result, $letters, 0);
var_dump($result);                 //3 - level deep array is ready.
解决方案可以是
eval()


很酷的故事,兄弟。你尝试了什么?我见过一些人使用explode()使用固定深度键做类似的事情。一、 但是,事先不知道阵列的深度。可能的重复-这只是众多重复中的一个。请更具创造性地搜索:)
$var
是一个空数组。索引
A
B
将未定义。是否运行了它?我运行并得到了这个结果数组([A]=>Array([B]=>Array([C]=>XXX)))。所以,在运行eval代码之后,索引A,B不能被取消定义。我有点不知道它为什么会起作用:dw关于
eval
是邪恶的通常警告是什么?特别是如果字符串来自用户输入!是的,eval使用起来很危险。如果您对验证一无所知,就不应该使用它。我必须删除“$array[$letters[$level]]]=array();”的初始化才能处理多个过程,但谢谢您。
<?php
    $a = "A.B.C";
    $temp = explode('.',$a);
    $keys = "";
    foreach ($temp as $value) {
        $keys .= "['$value']";
    }
    $val = "XXX";
    $var = array();
    eval('$var'.$keys.' = $val;');
    print_r($var);
?>
Array ( [A] => Array ( [B] => Array ( [C] => XXX ) ) )