For Programmers: Free Programming Magazines  


Home > Archive > PHP Programming > January 2008 > Parsing tab formatted hierarchical strings into a tree









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Parsing tab formatted hierarchical strings into a tree
Kailash Nadh

2008-01-27, 7:18 pm

Hello all.
I have this tab formatted hierarchical structure.
--------------------
0 A
1 B
2 C
2 D
1 E
--------------------

Every line has a string intended to its depth with tabs. (The numbers
in the above example are the number of tabs intending that line and
are not present in the actual data)

I need to parse the above structure into a tree (multi-dimensional
array), for eg:
Array
(
[A] => Array
(
[B] => Array
(
[C] =>
[D] =>
)
[E] =>
)
)

I have this loop that parses each line and has the following for every
line,
$depth = (number of tabs) and $key = (A, B etc..)

So the string in each line is the KEY of the array / tree. Needn't
worry about the value.

This is pretty simple, but I just can't get my head around it. Could
anyone throw some light on this issue?

Thank you.

--
Kailash Nadh | http://kailashnadh.name
Jerry Stuckle

2008-01-27, 10:12 pm

Kailash Nadh wrote:
> Hello all.
> I have this tab formatted hierarchical structure.
> --------------------
> 0 A
> 1 B
> 2 C
> 2 D
> 1 E
> --------------------
>
> Every line has a string intended to its depth with tabs. (The numbers
> in the above example are the number of tabs intending that line and
> are not present in the actual data)
>
> I need to parse the above structure into a tree (multi-dimensional
> array), for eg:
> Array
> (
> [A] => Array
> (
> [B] => Array
> (
> [C] =>
> [D] =>
> )
> [E] =>
> )
> )
>
> I have this loop that parses each line and has the following for every
> line,
> $depth = (number of tabs) and $key = (A, B etc..)
>
> So the string in each line is the KEY of the array / tree. Needn't
> worry about the value.
>
> This is pretty simple, but I just can't get my head around it. Could
> anyone throw some light on this issue?
>
> Thank you.
>
> --
> Kailash Nadh | http://kailashnadh.name
>



Personally, I'd use a recursive function. Parameters to the function
are reference to a variable and depth (first is an empty array and 0).

Read a new item. If it is on same level, just add it to the current
array. If it's one level lower, add an array as the new element and
recurse with the new array as the parameter.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

Kailash Nadh

2008-01-28, 7:13 pm

On Jan 28, 1:16 am, Jerry Stuckle <jstuck...@attglobal.net> wrote:
> KailashNadhwrote:
>
>
>
>
>
>
>
>
> Personally, I'd use a recursive function. Parameters to the function
> are reference to a variable and depth (first is an empty array and 0).
>
> Read a new item. If it is on same level, just add it to the current
> array. If it's one level lower, add an array as the new element and
> recurse with the new array as the parameter.
>
> --
> ==================
> Remove the "x" from my email address
> Jerry Stuckle
> JDS Computer Training Corp.
> jstuck...@attglobal.net
> ==================


I already thought of using a recursive function, but what would happen
if there's a case like this ?
0|
1| A
2| B
3| C
4| D
4| E
5| F
6| G
6| H
2| I
2| H
3| K

After level 6, $depth suddenly jumps back to 2 and goes to 3 and so
on.

Thank you.

--
Kailash Nadh | http://kailashnadh.name
Jerry Stuckle

2008-01-28, 7:13 pm

Kailash Nadh wrote:
> On Jan 28, 1:16 am, Jerry Stuckle <jstuck...@attglobal.net> wrote:
>
> I already thought of using a recursive function, but what would happen
> if there's a case like this ?
> 0|
> 1| A
> 2| B
> 3| C
> 4| D
> 4| E
> 5| F
> 6| G
> 6| H
> 2| I
> 2| H
> 3| K
>
> After level 6, $depth suddenly jumps back to 2 and goes to 3 and so
> on.
>
> Thank you.
>
> --
> Kailash Nadh | http://kailashnadh.name
>


No problem. If the depth is lower than the current one, return to
higher levels until you have the correct depth.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2010 codecomments.com