我想编写一组返回缩进字符串的函数。从这样table([tr([td([1,2,3]),td([4,5,6])])]);
的结构,我想创建一个结构是这样的:recusive函数调用中的跟踪级别
<table>
--<tr>
----<td>1</td>
----<td>2</td>
----<td>3</td>
--</tr>
--<tr>
----<td>4</td>
----<td>5</td>
----<td>6</td>
--</tr>
</table>
(我实际上并不想用-
,但空间,但我只是用连字符开发/调试。 )
这是我的脚本:
<?php
function tag($tag, $content) {
static $depth = 0;
$depth++;
echo "tag: '$tag', depth: $depth\n";
if (is_array($content)) {
$output = str_repeat("--", $depth);
foreach ($content as $part) {
$output .= tag($tag, $part);
}
$depth--;
return $output;
}
$output = str_repeat("--", $depth);
$depth--;
return "$output<$tag>$content</$tag>\n";
}
function table($content) {
return tag(__FUNCTION__, $content);
}
function tr($content) {
return tag(__FUNCTION__, $content);
}
function td($content) {
return tag(__FUNCTION__, $content);
}
echo table([tr([td([1,2,3]),td([4,5,6])])]);
这是我的输出。第一部分是调试:
tag: 'td', depth: 1
tag: 'td', depth: 2
tag: 'td', depth: 2
tag: 'td', depth: 2
tag: 'td', depth: 1
tag: 'td', depth: 2
tag: 'td', depth: 2
tag: 'td', depth: 2
tag: 'tr', depth: 1
tag: 'tr', depth: 2
tag: 'tr', depth: 2
tag: 'table', depth: 1
tag: 'table', depth: 2
而这里的最终结构:
------<table>------<tr>------<td>1</td>
----<td>2</td>
----<td>3</td>
</tr>
----<tr>------<td>4</td>
----<td>5</td>
----<td>6</td>
</tr>
</table>
我已经意识到的是,PHP是处理最里面的表达式中,td()
S,第一,那么tr()
小号,最后是table()
,这就是为什么缩进没有按照我想要的方式发生。
我一直试图反复调试这段代码,现在我的大脑短路了。有什么方法可以知道我在结构中有多“深”,因此我可以正确缩进标签?
此外,我的分解线断了,我不知道为什么或如何开始调试。所以,修正这个问题的奖励点也是如此。
我意识到这不是一个实际的解决方案,并有不同的方式来获得我想要的输出,但我已经走了这条路,现在我想了解它如何工作,为了的。
哪里是$内容? –
@raveenanigam它可以是数组的数字元素(1,2,3等),也可以是字符串“td”,“tr”或“table”。 – user151841