我被困住了 我想我需要写一个循环方法...
我试图将一系列亲子关系转换成一棵等级树,
这是我可能有的输入数据的例子:
$input = array(
array(
itemGroupID => 1,
childItemGroupID => 2
),
array(
itemGroupID => 1,
childItemGroupID => 3
),
array(
itemGroupID => 1,
childItemGroupID => 4
),
array(
itemGroupID => 1,
childItemGroupID => 212
),
array(
itemGroupID => 1,
childItemGroupID => 339
),
array(
itemGroupID => 1,
childItemGroupID => 336
),
array(
itemGroupID => 1,
childItemGroupID => 6
),
array(
itemGroupID => 1,
childItemGroupID => 5
),
array(
itemGroupID => 6,
childItemGroupID => 8
),
array(
itemGroupID => 6,
childItemGroupID => 9
),
array(
itemGroupID => 6,
childItemGroupID => 10
),
array(
itemGroupID => 6,
childItemGroupID => 11
),
array(
itemGroupID => 6,
childItemGroupID => 12
),
array(
itemGroupID => 6,
childItemGroupID => 13
),
array(
itemGroupID => 6,
childItemGroupID => 74
),
array(
itemGroupID => 9,
childItemGroupID => 15
),
array(
itemGroupID => 10,
childItemGroupID => 16
),
array(
itemGroupID => 11,
childItemGroupID => 17
),
array(
itemGroupID => 12,
childItemGroupID => 18
),
array(
itemGroupID => 13,
childItemGroupID => 19
),
array(
itemGroupID => 74,
childItemGroupID => 75
)
);
我希望以如下格式获取回数据:
$output = array(
array(
itemGroupID => 1,
children => array(
array(
itemGroupID => 2
),
array(
itemGroupID => 3
),
array(
itemGroupID => 4
),
array(
itemGroupID => 212
),
array(
itemGroupID => 339
),
array(
itemGroupID => 336
),
array(
itemGroupID => 6,
children => array(
array(
itemGroupID => 8
),
array(
itemGroupID => 9,
children => array(
array(
itemGroupID => 15
)
)
),
array(
itemGroupID => 10,
children => array(
array(
itemGroupID => 16
)
)
),
array(
itemGroupID => 11,
children => array(
array(
itemGroupID => 17
)
)
),
array(
itemGroupID => 12,
children => array(
array(
itemGroupID => 18
)
)
),
array(
itemGroupID => 13,
children => array(
array(
itemGroupID => 19
)
)
),
array(
itemGroupID => 74,
children => array(
array(
itemGroupID => 75
)
)
)
)
),
array(
itemGroupID => 5
)
)
)
);
(我担心如果你从第一个节点重现, 可能会发现这已经是... )
Btw, 元素I输出可以用来获得起始指数, 每个等级链的起始指数 。
private function _arraySearch($arr, $callback)
{
foreach ($arr as $key => $item) {
if ($callback($item)) {
return $key;
}
}
return false;
}
private function _findRootsOfItemGroupTree($activeItemGroupChildren)
{
$searchArray = $activeItemGroupChildren;
$roots = array();
foreach ($activeItemGroupChildren as $itemGroupChild) {
$parentItemGroupID = $itemGroupChild[ itemGroupID ];
$found = array_filter($searchArray, function ($element) use ($parentItemGroupID) {
return $element[ childItemGroupID ] == $parentItemGroupID;
});
$rootItemGroupID = $parentItemGroupID;
if (count($found) == 0
&& $this->_arraySearch($roots,
function ($element) use ($rootItemGroupID) {
return $element[ itemGroupID ] == $rootItemGroupID;
}) === false) {
$roots[] = $itemGroupChild;
}
}
return $roots;
}
然而,我现在需要利用这些信息来创建一个新的关联阵列。 我无法找到方法。 (我将在几分钟后张贴一些工作成果。 ) 。 )
想法吗?
注:假设这一结构没有循环循环循环,即使从技术上说它们可能存在。