在PHP中,基于随机关系数据的层次结构数组?

时间:2016-04-02 15:06:07

标签: php python csv hierarchy hierarchical-data

我的问题非常 非常类似于以下内容,但我有几点不同,包括用PHP编写。

https://softwareengineering.stackexchange.com/questions/261074/process-to-generate-hierarchical-structure-based-on-relational-data

我在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()

0 个答案:

没有答案