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.
Elegant? Define elegant. I think some people are going to turn this into a golf contest as opposed to simply doing what makes sense and is evident to anyone stumbling upon the code later on:
I suspect this is what you have, in which case I suggest you pat yourself in the back and move on.