gpt4 book ai didi

php - 字符串,树仅用逗号分隔到多维 php 数组

转载 作者:行者123 更新时间:2023-12-04 04:39:13 25 4
gpt4 key购买 nike

我有一个这样的字符串:

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 加逗号或不带逗号结尾,我会陷入无限循环。我知道我可以在调用函数之前检查是否有足够的逗号并添加它们,但我不喜欢我的函数。我知道有人在这方面比我更好。所以我问:

将字符串(树,仅用逗号分隔)转换为多维数组()的最佳解决方案是什么?

附言我不确定这是否是最好的提问方式。

最佳答案

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;
}

在键盘上工作正常: http://codepad.org/PwKFfQfD

关于php - 字符串,树仅用逗号分隔到多维 php 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19203988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com