I've made a quick demo of what you've asked for, but not sure how similar your array matches up to the test one I have here. Let me know if you need some more help, it's an interesting problem.
<?php
$arr = array(
'val1' => 1,
'val2' => 2,
'val3' => array(
'val3.1' => 1,
'val3.2' => array(
'val3.2.1' => 1
),
'val3.3' => 3
),
'val4' => 4
);
function arrayToPath($array, $path = ''){
$paths_out = array();
foreach($array as $key => $value){
$path .= '\\' . $key;
$paths_out[] = $path;
if(true === is_array($value)){
$paths_out = array_merge($paths_out, arrayToPath($value, $path));
}
}
return $paths_out;
}
$path_outputs = arrayToPath($arr);
var_dump($path_outputs);
?>
Will output:
array(8) {
[0]=> string(5) "\val1"
[1]=> string(10) "\val1\val2"
[2]=> string(15) "\val1\val2\val3"
[3]=> string(22) "\val1\val2\val3\val3.1"
[4]=> string(29) "\val1\val2\val3\val3.1\val3.2"
[5]=> string(38) "\val1\val2\val3\val3.1\val3.2\val3.2.1"
[6]=> string(36) "\val1\val2\val3\val3.1\val3.2\val3.3"
[7]=> string(20) "\val1\val2\val3\val4"
}