我有串:字符串数组结构阵列
Main.Sub.SubOfSub
有些类型的数据,可能是一个字符串:
SuperData
我如何这一切转化为这阵上面?
Array
(
[Main] => Array
(
[Sub] => Array
(
[SubOfSub] => SuperData
)
)
)
感谢您的帮助, PK
我有串:字符串数组结构阵列
Main.Sub.SubOfSub
有些类型的数据,可能是一个字符串:
SuperData
我如何这一切转化为这阵上面?
Array
(
[Main] => Array
(
[Sub] => Array
(
[SubOfSub] => SuperData
)
)
)
感谢您的帮助, PK
给出的值
$key = "Main.Sub.SubOfSub";
$target = array();
$value = "SuperData";
下面是一些代码,我已经躺在附近已经做了你need¹什么:
$path = explode('.', $key);
$root = &$target;
while(count($path) > 1) {
$branch = array_shift($path);
if (!isset($root[$branch])) {
$root[$branch] = array();
}
$root = &$root[$branch];
}
$root[$path[0]] = $value;
See it in action。它实际上可以做得稍微多一点:它可以简单地封装在一个函数内部,并且可以在所有三个输入值上进行配置(您可以将数组传递给具有现有值的数组,并且可以根据需要扩展它) 。
就像乔恩建议的(并在询问聊天中的反馈)中,引用/变量别名在这里有助于遍历动态堆栈键。因此,唯一需要的就是遍历所有子项,并最终设定值:
$rv = &$target;
foreach(explode('.', $key) as $pk)
{
$rv = &$rv[$pk];
}
$rv = $value;
unset($rv);
参考使得有可能使用堆栈,而不是递归一般较瘦的。此外,此代码可以防止覆盖$target
阵列中的现有元素。完整的例子:
$key = "Main.Sub.SubOfSub";
$target = array('Main' => array('Sub2' => 'Test'));
$value = "SuperData";
$rv = &$target;
foreach(explode('.', $key) as $pk)
{
$rv = &$rv[$pk];
}
$rv = $value;
unset($rv);
var_dump($target);
输出:
array(1) {
["Main"]=>
array(2) {
["Sub2"]=>
string(4) "Test"
["Sub"]=>
array(1) {
["SubOfSub"]=>
string(9) "SuperData"
}
}
}
相关问题(S):
$ tmp_array = explode('。',$ your_string);然后遍历$ tmp_array并创建你的$ k数组 – djot 2011-12-16 16:34:24