<?php
function paths(array $a)
{
// if first item is an array, recurse
if (is_array(reset($a))) {
foreach ($a as $k => $v) {
foreach (paths($v) as $path) {
// yield "key - subpath"
yield sprintf('%s - %s', $k, $path);
}
}
} else {
// yield leaf
yield sprintf('(%s)', implode(', ', $a));
}
}
$obj = json_decode('{
"Group1": {
"Blue": {
"Round": [
"Harold",
"Arthur",
"Tom"
]
},
"Green": {
"Round": [
"Harold"
],
"Circle": [
"Todd",
"Mike"
]
}
},
"Group2": {
"Blue": {
"Round": [
"Peter"
]
}
}
}', true);
foreach (paths($obj) as $path) {
printf("%s\n", $path);
}
- Output for 5.6.0 - 5.6.40, 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.19, 8.3.0 - 8.3.7
- Group1 - Blue - Round - (Harold, Arthur, Tom)
Group1 - Green - Round - (Harold)
Group1 - Green - Circle - (Todd, Mike)
Group2 - Blue - Round - (Peter)
preferences:
260.86 ms | 404 KiB | 292 Q