@ 2015-11-05T23:53:55Z <?php
$list = json_decode(<<<'JSON'
[
{ "TagId": 2, "ParentTagId": null, "Name": "women" },
{ "TagId": 5, "ParentTagId": 2, "Name": "bottom" },
{ "TagId": 4, "ParentTagId": 2, "Name": "top" },
{ "TagId": 7, "ParentTagId": 4, "Name": "shirt" },
{ "TagId": 8, "ParentTagId": 4, "Name": "tshirt" },
{ "TagId": 12, "ParentTagId": 7, "Name": "longsleeve" },
{ "TagId": 16, "ParentTagId": null, "Name": "men" }
]
JSON
);
class Trie implements getIterator
{
protected $parent;
protected $children = [];
public function insert(Node $node)
{
$node->parent = $this;
$this->children[] = $node;
}
public function findById($id)
{
foreach($this->children as $childNode) {
if ($childNode->TagId === $id) {
return $childNode;
}
}
}
public function hasChildren()
{
return (bool) count($this->children);
}
public function getIterator()
{
return $this->children;
}
}
class Node extends Trie
{
public function __construct(stdClass $obj)
{
foreach($obj as $p => $v) {
$this->$p = $v;
}
}
}
$trie = new Trie;
/* Insert all of the parentless nodes */
foreach($list as $n => $obj) {
if (!$obj->ParentTagId) {
$trie->insert(new Node($obj));
unset($list[$n]);
}
}
/* Insert all of the child nodes */
foreach($list as $n => $obj) {
$p = $trie->findById($obj->ParentTagId);
if ($p) {
$p->insert(new Node($obj));
unset($list[$n]);
}
}
var_dump(json_encode($trie));
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 , 8.2.0 - 8.2.18 , 8.3.0 - 8.3.6 Fatal error: Uncaught Error: Interface "getIterator" not found in /in/ubuKX:15
Stack trace:
#0 {main}
thrown in /in/ubuKX on line 15
Process exited with code 255 . Output for 7.4.0 - 7.4.33 Fatal error: Uncaught Error: Interface 'getIterator' not found in /in/ubuKX:15
Stack trace:
#0 {main}
thrown in /in/ubuKX on line 15
Process exited with code 255 . Output for 7.0.0 - 7.0.20 , 7.1.0 - 7.1.33 , 7.2.0 - 7.2.33 , 7.3.0 - 7.3.33 Fatal error: Interface 'getIterator' not found in /in/ubuKX on line 15
Process exited with code 255 . Output for 5.5.0 - 5.5.38 , 5.6.0 - 5.6.28 Fatal error: Interface 'getIterator' not found in /in/ubuKX on line 16
Process exited with code 255 . preferences:dark mode live preview
241.38 ms | 402 KiB | 253 Q