我的问题非常 非常类似于以下内容,但我有几点不同,包括用PHP编写。
我在CSV中有以下数据:
firstname,surname,position,manager
John,D,Clerk,Jane D
Bob,B,Clerk,Jane D
Harry,S,Supervisor,Jack W
Jack,W,CEO,
David,B,Cook,Jack W
Jane,D,CTO,
Amy,L,CBO,
Mike,M,Singer,John D
使用PHP,我需要在一个层次结构中创建一个数据数组,其中记录位于正确的经理记录下。最高级别的记录由空白的经理'领域。请注意如何有多个顶级记录。此外,请注意数据是如何完全随机的。
我试图在PHP中转换上面的buildtree()函数,但它看起来并不正确。这是我的尝试,有人可以解释我可能会出错的地方吗?我似乎遇到的麻烦是,当我将数组传递给buildtree()时,它的结尾是因为它以'空白'开头。键,因此它不会继续递归:
function buildtree($parents,$tree = array(),$parent_id = ''){
$parent = $parents[$parent_id];
if($parent == ''){
return $tree;
}
foreach($parent as $child){
$report = array($child[0].' '.$child[1]);
if(empty($tree)){
$tree = $report;
}
else{
$reports = $tree['reports'];
$reports = array_merge($reports,$report);
}
buildtree($parents,$report,$child[0].' '.$child[1]);
}
return $tree;
}
# something not right about this.
# first, build an array of managers
foreach($_SESSION['csv_data'] as $k=>$val){
if($k > 0){
$manager = $val[3];
$heir[$manager]['reports'][$val[0].' '.$val[1]] = '';
}
}
$final = buildtree($heir);
echo '<pre>';
print_r($final);
echo '</pre>';
供参考,这是原始的python buildtree()函数:
def buildtree(t=None, parent_eid=''):
"""
Given a parents lookup structure, construct
a data hierarchy.
"""
parent = parents.get(parent_eid, None)
if parent is None:
return t
for eid, name, mid in parent:
report = { 'name': name }
if t is None:
t = report
else:
reports = t.setdefault('reports', [])
reports.append(report)
buildtree(report, eid)
return t
data = buildtree()