python — В PHP массив иерархической структуры основан на рандомизированных реляционных данных?

Мои вопросы очень очень похоже на следующее, но у меня есть пара отличий, в том числе написание на 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, мне нужно создать массив этих данных в иерархической структуре, в которой записи располагаются под правильной записью менеджера. Запись верхнего уровня обозначается пустым полем «менеджер». Обратите внимание, что может быть более одной записи верхнего уровня. Кроме того, обратите внимание, как данные полностью случайны.

Я пытался преобразовать вышеупомянутую функцию buildtree () в PHP, но она не выглядит корректной. Вот моя попытка, может кто-нибудь объяснить, где я могу пойти не так? Мне кажется, что проблема в том, что когда я передаю массив в 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()

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]