Я не уверен, как работает ваш класс 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);