This is actually a problem that I've already solved, but I suspect that there may be a better solution. I have a nested array which basically represents a list of all the nodes from a category tree (in no particular order):
Array(
[0] => Array(
[Category] => Array(
[id] => 49
[name] => Poster
)
[Child] => Array()
)
[1] => Array(
[Category] => Array(
[id] => 48
[name] => Sticker
)
[Child] => Array()
)
[2] => Array(
[Category] => Array(
[id] => 46
[name] => Hat
)
[Child] => Array()
)
[3] => Array(
[Category] => Array(
[id] => 45
[name] => Hoodie
)
[Child] => Array()
)
)
You'll notice that $node['Child']
is an empty array in all instances. This is because I've already used array_filter()
to filter out all non-leaf-nodes. Still, what I ultimately want is to have a single-dimensional array of the leaf nodes like this:
Array(
[49] => Poster
[48] => Sticker
[46] => Hat
[45] => Hoodie
)
So what would be the most elegant way of converting the first array to the second array?
Optionally, you can also start with an array of both leaf-nodes and non-leaf-nodes, and try to both prune the array and restructure it. An example of a non-leaf-node would be something like:
[7] => Array(
[Category] => Array(
[id] => 36
[name] => Merch
)
[Child] => Array(
[0] => Array(
[id] => 49
[name] => Poster
)
[1] => Array(
[id] => 48
[name] => Sticker
)
[2] => Array(
[id] => 40
[name] => Apparel
)
)
)
Lastly, I'm using CakePHP, so use of CakePHP's Set
class is also acceptable.