[英]String, tree separated only with commas to an multidimensional php array
我有一个像这样的字符串:
a,,b,c,,d,,,e,f,g,,e,,,,
我想得到这样的数组:
Array
(
[a] => Array
(
)
[b] => Array
(
[c] => Array
(
)
[d] => Array
(
)
)
[e] => Array
(
[f] => Array
(
[g] => Array
(
)
[e] => Array
(
)
)
)
)
逻辑是:项目后,第一个逗号打开该项目,第二个逗号将关闭该项目,两个逗号之间的所有内容均为其子元素。
我做了这个功能:
function source() {
global $get;
$items = array();
$item = true;
while ($item) {
$pieces = explode(',', $get, 2);
if (!empty($pieces[1])) $get = $pieces[1];
$item = $pieces[0];
if ($item) $items[$item] = source();
}
return $items;
}
$get = 'a,,b,c,,d,,,e,f,g,,e,,,,';
print_r (source());
我仍然遇到一些问题,例如,如果字符串以item加一个逗号结束或没有逗号结束,则会出现一个无限循环。 我知道我可以检查是否有足够的逗号并在调用该函数之前将其添加,但是我不喜欢我的函数。 我知道有人在这方面比我强。 所以我问:
将字符串(树,仅用逗号分隔)转换为多维array()的最佳解决方案是什么?
ps我不确定这是否是最好的询问方式。
function parse_tree($str) {
$base_arr = array();
$arr = &$base_arr;
$stack = array();
foreach (explode(',', $str) as $char) {
if ($char !== '') {
$arr[$char] = array();
$stack[] = &$arr;
$arr = &$arr[$char];
} elseif ($stack && $char === '') {
$tmp = array_slice($stack, -1, 1);
$arr = &$tmp[0];
array_pop($stack);
}
}
return $base_arr;
}
在Codepad上工作正常: http : //codepad.org/PwKFfQfD
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.