gpt4 book ai didi

php - 动态导入树

转载 作者:行者123 更新时间:2023-11-30 21:43:18 25 4
gpt4 key购买 nike

使用 laravel-nested 设置 Baum 的包并尝试将树导入 mysql 数据库。导入数据:

1. FirstLevelWord1 - SecondLevelWord1 - ThirdLevelWord1 - FourthLevelWord1
2. FirstLevelWord1 - SecondLevelWord1 - ThirdLevelWord1 - FourthLevelWord2
3. FirstLevelWord1 - SecondLevelWord1 - ThirdLevelWord1 - FourthLevelWord3

我需要更新相同的单词而不是在数据库中写入重复项。但现在我只能用第一级词来做到这一点——不知道如何在第二级和后续级别动态更新相同的词。

导入方法

foreach ($words as $value){
$c = explode("-", $value);
$root = Chain::firstOrCreate(['cWord' => $c[0]]);

for ($i = 1; $i < count($c) ; $i++) {
$prevChild = null;
if (Chain::where('cWord', $c[$i])->first()){
$prevChild = Chain::where('cWord', $c[$i-1])->first();
}

$child = Chain::create(['cWord' => $c[$i]]);

if($i == 1){
$child->makeChildOf($root);
} else {
$child->makeChildOf(
$root->getDescendants()[count($root->getDescendants())-1]);
}
}

$node = Chain::where('cWord', '=', $c[0])->first();
}

取而代之的是这种结构

enter image description here

我明白了

enter image description here

如您所见,第二层和第三层的单词是重复的。我有什么办法可以解决这个问题吗?

最佳答案

我不确定您的 Chain 类是如何工作的,所以我使用关联数组来完成此操作。您必须更改它才能与您的 Chain 类一起使用。

$words = [
"бить - разбить - разбивать - разбивание",
"бить - разбить - разбивать - разбиватель",
"бить - разбить - разбивать - разбивка",
];

$structure = [];

function fill(array $structure, string $x, ...$xs): array {
if (!isset($structure[$x])) {
$structure[$x] = [];
}

if ($xs) {
$structure[$x] = fill($structure[$x], ...$xs);
}

return $structure;
}

foreach ($words as $value) {
$c = explode(" - ", $value);

$structure = fill($structure, ...$c);
}

print_r($structure);

编辑:我添加了一些代码,因此可以与 buildtree 一起使用方法。我确信有一种方法可以将 Baum 与上述功能集成以简化所有这些操作。

function createBaumTree(array $structure): array
{
$baumTree = [];

foreach ($structure as $key => $value) {
if ($value) {
$baumTree[] = [
'name' => $key,
'children' => createBaumTree($value),
];
continue;
}

$baumTree[] = ['name' => $key];
}

return $baumTree;
}

$baumTree = createBaumTree($structure);

print_r($baumTree);

关于php - 动态导入树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50648590/

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