I have a C# function that takes a list of objects and fills a treeview with the data:
private void FillTree(IEnumerable<indexlistapp> data)
{
Dictionary<int, TreeNode> parents = new Dictionary<int, TreeNode>();
foreach (var a in data)
{
string price = "";
int level = a.treelevel-1;
if (a.price > 0)
{
price = string.Concat("PRICE:$", a.price.ToString(), " ");
}
if (level == 0 || parents.Count() == 0)
{
parents[level] = tvResults.Nodes.Add(String.Concat(a.app, a.lrflag, " ", price, "IC:", a.ic));
parents[level].Tag = String.Concat(a.ic, "|", a.seq);
}
else
{
parents[level] =
parents[level - 1].Nodes.Add(String.Concat(a.app, a.lrflag, " ", price, "IC:", a.ic));
parents[level].Tag = String.Concat(a.ic, "|", a.seq);
}
parents[level].EnsureVisible();
}
if (tvResults.Nodes.Count > 0) tvResults.Nodes[0].EnsureVisible();
}
Here is what the data that is sent to the FillTree function looks like, converted to JSON, it is simply a List of indexlistapp objects (IEnumerable<indexlistapp> data):
[
{"treelevel":"1","app":"Front","lrflag":null,"ic":null,"price":null,"parentlevel":"0","seq":"27"},
{"treelevel":"2","app":"V-Series","lrflag":null,"ic":null,"price":null,"parentlevel":"1","seq":"28"},
{"treelevel":"3","app":"opt J56","lrflag":null,"ic":null,"price":null,"parentlevel":"2","seq":"29"},
{"treelevel":"4","app":"R.","lrflag":"R","ic":"536-01132AR","price":"693.00","parentlevel":"3","seq":"30"},
{"treelevel":"4","app":"L.","lrflag":"L","ic":"536-01133AL","price":"693.00","parentlevel":"3","seq":"31"},
{"treelevel":"3","app":"opt J63","lrflag":null,"ic":null,"price":null,"parentlevel":"2","seq":"32"},
{"treelevel":"4","app":"R.","lrflag":"R","ic":"536-01130R","price":null,"parentlevel":"3","seq":"33"},
{"treelevel":"4","app":"L.","lrflag":"L","ic":"536-01131L","price":null,"parentlevel":"3","seq":"34"},
{"treelevel":"2","app":"exc. V-Series","lrflag":null,"ic":null,"price":null,"parentlevel":"1","seq":"35"},
{"treelevel":"3","app":"opt JE5","lrflag":null,"ic":null,"price":null,"parentlevel":"2","seq":"36"},
{"treelevel":"4","app":"AWD","lrflag":null,"ic":null,"price":null,"parentlevel":"3","seq":"37"},
{"treelevel":"5","app":"R.","lrflag":null,"ic":"536-01142","price":null,"parentlevel":"4","seq":"38"},
{"treelevel":"5","app":"L.","lrflag":null,"ic":"536-01143","price":null,"parentlevel":"4","seq":"39"},
{"treelevel":"4","app":"RWD","lrflag":null,"ic":null,"price":null,"parentlevel":"3","seq":"40"},
{"treelevel":"5","app":"R.","lrflag":null,"ic":"536-01143","price":null,"parentlevel":"4","seq":"41"},
{"treelevel":"5","app":"L.","lrflag":null,"ic":"536-01142","price":null,"parentlevel":"4","seq":"42"},
{"treelevel":"3","app":"opt J55","lrflag":null,"ic":null,"price":null,"parentlevel":"2","seq":"43"},
{"treelevel":"4","app":"AWD","lrflag":null,"ic":null,"price":null,"parentlevel":"3","seq":"44"},
{"treelevel":"5","app":"R.","lrflag":null,"ic":"536-01036","price":null,"parentlevel":"4","seq":"45"},
{"treelevel":"5","app":"L.","lrflag":null,"ic":"536-01037","price":null,"parentlevel":"4","seq":"46"},
{"treelevel":"4","app":"RWD","lrflag":null,"ic":null,"price":null,"parentlevel":"3","seq":"47"},
{"treelevel":"5","app":"R.","lrflag":null,"ic":"536-01037","price":null,"parentlevel":"4","seq":"48"},
{"treelevel":"5","app":"L.","lrflag":null,"ic":"536-01036","price":null,"parentlevel":"4","seq":"49"},
{"treelevel":"1","app":"Rear","lrflag":null,"ic":null,"price":null,"parentlevel":"0","seq":"260"},
{"treelevel":"2","app":"Base","lrflag":null,"ic":null,"price":null,"parentlevel":"1","seq":"261"},
{"treelevel":"3","app":"opt JE5","lrflag":null,"ic":null,"price":null,"parentlevel":"2","seq":"262"},
{"treelevel":"4","app":"R.","lrflag":"R","ic":"536-01038R","price":null,"parentlevel":"3","seq":"263"},
{"treelevel":"4","app":"L.","lrflag":"L","ic":"536-01039L","price":null,"parentlevel":"3","seq":"264"},
{"treelevel":"3","app":"opt J55","lrflag":null,"ic":null,"price":null,"parentlevel":"2","seq":"265"},
{"treelevel":"4","app":"R.","lrflag":"R","ic":"536-01042R","price":null,"parentlevel":"3","seq":"266"},
{"treelevel":"4","app":"L.","lrflag":"L","ic":"536-01043L","price":null,"parentlevel":"3","seq":"267"},
{"treelevel":"2","app":"V-Series","lrflag":null,"ic":null,"price":null,"parentlevel":"1","seq":"268"},
{"treelevel":"3","app":"R.","lrflag":"R","ic":"536-01134AR","price":"403.00","parentlevel":"2","seq":"269"},
{"treelevel":"3","app":"L.","lrflag":"L","ic":"536-01135AL","price":"466.00","parentlevel":"2","seq":"270"}
]
I need to be able to build the JSON below in PHP with a function that takes the return from a PostgreSQL script:
This conversion doesn’t work, I guess I’m just not getting it:
function FillTree($d)
{
$parents = array();
foreach ($d as $k=>$v)
{
foreach ($d[$k] as $key=>$value)
{
$price = "";
$level = $d[$k][$key]-1;
if (isset($d[$k]["price"]) && $d[$k]["price"] > 0)
{
$price = "PRICE:$". $d[$k]["price"]. " ";
}
if ($level == 0 || count($parents) == 0)
{
$parents[$level]["text"] = $d[$k]["app"] . $d[$k]["lrflag"] . " " . $d[$k]["price"] . "IC:" . $d[$k]["ic"];
$parents[$level]["tag"] = $d[$k]["ic"];
}
else
{
$parents[$level-1]["text"] = $d[$k]["app"] . $d[$k]["lrflag"] . " " . $price . "IC:" . $d[$k]["ic"];
$parents[$level-1]["tag"] = $d[$k][".ic"];
}
}
}
return $parents;
}
Here is what I’m expecting:
[
{
"text": "Front IC:",
"tags": [],
"nodes": [
{
"text": "V-Series IC:",
"tags": [],
"nodes": [
{
"text": "opt J56 IC:",
"tags": [],
"nodes": [
{
"text": "R. R PRICE: $693 IC: 536-01132AR",
"tags": ["536-01132AR"]
},
{
"text": "L. L PRICE: $693 IC: 536-01132AL",
"tags": ["536-01132AL"]
}
]
},
{
"text": "opt J63",
"tags": [],
"nodes": [
{
"text": "R. R IC: 536-01130R",
"tags": ["536-01130R"]
},
{
"text": "L. L IC: 536-01131L",
"tags": ["536-01131L"]
}
]
}
]
},
{
"text":"exc. V-Series IC:",
"tags": [],
"nodes": [
{
"text": "opt JE5 IC:",
"tags": [],
"nodes": [
{
"text": "AWD IC:",
"tags": [],
"nodes": [
{
"text": "R. IC: 536-01142",
"tags": ["536-01142"]
},
{
"text": "L. IC: 536-01143",
"tags": ["536-01143"]
}
]
},
{
"text": "RWD IC:",
"tags": [],
"nodes": [
{
"text": "R. IC: 536-01143",
"tags": ["536-01143"]
},
{
"text": "L. IC: 536-01142",
"tags": ["536-01142"]
}
]
}
]
},
{
"text": "opt J55 IC:",
"tags": [],
"nodes": [
{
"text": "AWD IC:",
"tags": [],
"nodes": [
{
"text": "R. IC: 536-01136",
"tags": ["536-01136"]
},
{
"text": "L. IC: 536-01137",
"tags": ["536-01137"]
}
]
},
{
"text": "RWD IC:",
"tags": [],
"nodes": [
{
"text": "R. IC: 536-01137",
"tags": ["536-01137"]
},
{
"text": "L. IC: 536-01136",
"tags": ["536-01136"]
}
]
}
]
}
]
}
]
},
{
"text": "Rear IC:",
"tags": [],
"nodes": [
{
"text": "Base IC:",
"tags": [],
"nodes": [
{
"text": "opt JE5 IC:",
"tags": [],
"nodes": [
{
"text": "R. IC: 536-01038R",
"tags": ["536-01038R"]
},
{
"text": "L. IC: 536-01039L",
"tags": ["536-01039L"]
}
]
},
{
"text": "opt J55 IC:",
"tags": [],
"nodes": [
{
"text": "R. IC: 536-01042R",
"tags": ["536-01042R"]
},
{
"text": "L. IC: 536-01043L",
"tags": []
}
]
}
]
},
{
"text": "V-Series IC:",
"tags": [],
"nodes": [
{
"text": "R. R PRICE: $403.00 IC: 536-01134AR",
"tags": ["536-01134AR"]
},
{
"text": "L. L PRICE: $466.00 IC: 536-01135AL",
"tags": ["536-01135AL"]
}
]
}
]
}
]