我有一个标识为output
的pre元素,并尝试向其添加多个元素
<pre id="output"></pre>
现在在我的PHP代码中运行一个for循环,只输出计数器变量(就本例而言)。
<?php
for ($i = 0; $i < 100; $i = $i + 1)
{
echo $i;
}
使用PHP将这些值附加到标识为output
的pre元素的最佳方法是什么?
编辑:我搜索一个解决方案,如果for循环不在pre标签内,该解决方案有效。它应该在我调用for循环的代码中不起作用,例如在<pre>
标记下方或<pre>
标记之上,两者都应该有效。
这只能用PHP吗?
答案 0 :(得分:3)
由于php是在页面加载时呈现的,所以你不需要追加它 - 只需将它放在div中并直接将其回显到输出中
<div id="divPlot" style="border: 1px solid black">
<x3d style="width: 700px; height: 700px; border: medium none;" width="700px" height="700px">
<scene render="true" bboxcenter="0,0,0" bboxsize="-1,-1,-1" pickmode="idBuf" dopickpass="true">
<orthoviewpoint centerofrotation="5,5,5" fieldofview="-5,-5,15,15" orientation="-0.5,1,0.2,0.8796459430051422" position="8,4,15" znear="0.1" zfar="10000"></orthoviewpoint>
<transform class="XAxis" rotation="0,0,0,0" render="true" bboxcenter="0,0,0" bboxsize="-1,-1,-1" center="0,0,0" translation="0,0,0" scale="1,1,1" scaleorientation="0,0,0,0">
<shape render="true" bboxcenter="0,0,0" bboxsize="-1,-1,-1" ispickable="true">
<appearance sorttype="auto" alphaclipthreshold="0.1">
<material emissivecolor="lightgray" ambientintensity="0.2" diffusecolor="0.8,0.8,0.8" shininess="0.2" specularcolor="0,0,0"></material>
</appearance>
<polyline2d class="X_PL2D" linesegments="0 0,2 0" solid="true" ccw="true" usegeocache="true" lit="true"></polyline2d>
</shape>
</transform>
<transform class="YAxis" rotation="0,1,0,-1.5707963267948966" render="true" bboxcenter="0,0,0" bboxsize="-1,-1,-1" center="0,0,0" translation="0,0,0" scale="1,1,1" scaleorientation="0,0,0,0">
<shape render="true" bboxcenter="0,0,0" bboxsize="-1,-1,-1" ispickable="true">
<appearance sorttype="auto" alphaclipthreshold="0.1">
<material emissivecolor="lightgray" ambientintensity="0.2" diffusecolor="0.8,0.8,0.8" shininess="0.2" specularcolor="0,0,0"></material>
</appearance>
<polyline2d class="Y_PL2D" linesegments="0 0,9 0" solid="true" ccw="true" usegeocache="true" lit="true"></polyline2d>
</shape>
</transform>
</scene>
</x3d>
</div>
答案 1 :(得分:2)
不完全确定是否要使用PHP附加内容或javascript。考虑在此问题中使用标签
但是对于PHP,你应该在渲染时这样做:
<?php
$output = '';
for ($i = 0; $i < 100; $i++) {
$output .= '<div>' . $i . '</div>';
}
?>
<pre id="output"><?=$output?></pre>
在javascript中,您可以使用getElementById()
var output = document.getElementById('output');
for(var i = 0; i < 100; i++) {
output.appendChild(document.createElement('div'));
}
答案 2 :(得分:1)
这是一个版本,它确实将数字附加到#output,其中php在OP的请求之外。仍然在运行时发生,但这次创建一个字符串,然后根据请求将其附加到<pre>
元素。我更喜欢我做的第一个,使用元素中的php,除非有一个明确的理由不使用它,我会先建议帽子。
<pre id="output"></pre>
<?php
$numbers=range (1,100);
$str="";
foreach ($numbers as $number) {
$str .= $number . "<br/>";
}
echo "<script>$('#output').append('$str')</script>";
?>
答案 3 :(得分:0)
<?php ob_start(); ?>
<html>
<head></head>
<body>
<pre id="output">###MARK_PRE###</pre>
</body>
</html>
<?php
$html = ob_get_contents();
ob_end_clean();
$loop_result = "";
$arr = ['apple', 'orange', 'bananas'];
foreach($arr as $value)
{
$loop_result .= "$value <br/>\n";
}
$html = trim(str_replace('###MARK_PRE###', $loop_result, $html));
echo $html;
这可以胜任。无论你将for循环置于html的下方还是上方,它都能正常工作。
如果将循环放在html之上就足够了,那就简单多了。在这种情况下你应该坚持answer of PierreDuc。
如果您真的想将html放在PHP代码之上,那么您实际上应该更好地使用像symfony这样的MVC框架。
我告诉你上面快速而肮脏的方式。
我最后想要注意的是,我没有看到任何将你的php逻辑置于你的html之上的原因。既然只有你的html取决于你的PHP,而不是相反的方式,你承诺自己将HTML放在php上面?
最后一个选项:如果你完全分离你的html和php代码并使用include会更好。你最终会得到两个文件:
template.html.php:
<html>
<head></head>
<body>
<pre id="output"><?= $pre_tag; ?></pre>
</body>
</html>
logic.php:
$arr = ['apple', 'orange', 'bananas'];
foreach($arr as $value)
{
$pre_tag.= "$value <br/>\n";
}
include('template.html.php');
但是,干净而坚固的解决方案是使用MVC-Framework。