I am trying to print any JSON object as simple HTML form inputs with the name properties as the Xpath of the json property in dot notation.
So far it works but i loose track of the initial
function printInp($title, $pre, $val, $rulekey = false) {
$html = "<label for='$pre'>$pre</label>";
$html .= "<input name='$pre' value='$val' type='text' />";
return $html;
}
function printForm($title, $item, $pre = '', $rulekey=false) {
if (!is_array($item)) {
echo printInp($title, $pre, $item, $rulekey);
} else {
foreach ($item as $key => $val) {
$pre = (empty($pre)) ? $key : $pre . '.' . $key;
if (is_array($val)) {
printForm($title, $val, $pre, $key);
} else {
echo printInp($title, $pre, $val, $key);
}
$pre = '';
}
}
}
$jsonStr = json_decode('[{"id":12,"name":"live music","icon":{"url":null,"thumb":{"url":null},"ios_profile":{"url":null},"medium":{"url":null}},"display_name":null,"top_level":false}]', TRUE);
echo printForm('test', $jsonStr);
PRINTS...
<label for='id'>id</label><input name='id' value='12' type='text' class='' />
<label for='name'>name</label><input name='name' value='live music' type='text' class='' />
<label for='icon.url'>icon.url</label><input name='icon.url' value='' type='text' class='' />
<label for='thumb.url'>thumb.url</label><input name='thumb.url' value='' type='text' class='' />
<label for='ios_profile.url'>ios_profile.url</label><input name='ios_profile.url' value='' type='text' class='' />
<label for='medium.url'>medium.url</label><input name='medium.url' value='' type='text' class='' />
<label for='display_name'>display_name</label><input name='display_name' value='' type='text' class='' />
<label for='top_level'>top_level</label><input name='top_level' value='' type='text' class='' />
PROBLEM BEING: I loose track of top level node names - "icon" in this case - as i traverse the array.
It should look like this:
<label for='id'>id</label><input name='id' value='12' type='text' class='' />
<label for='name'>name</label><input name='name' value='live music' type='text' class='' />
<label for='icon.url'>icon.url</label><input name='icon.url' value='' type='text' class='' />
<label for='icon.thumb.url'>icon.thumb.url</label><input name='icon.thumb.url' value='' type='text' class='' />
<label for='icon.ios_profile.url'>icon.ios_profile.url</label><input name='icon.ios_profile.url' value='' type='text' class='' />
<label for='icon.medium.url'>icon.medium.url</label><input name='icon.medium.url' value='' type='text' class='' />
<label for='display_name'>display_name</label><input name='display_name' value='' type='text' class='' />
<label for='top_level'>top_level</label><input name='top_level' value='' type='text' class='' />
(i will accept answers in any language)