我需要包含一个外部 php 文件,然后执行一些代码,最后包含最终文件但是由于第一个文件有 foreach 的开头,而第二个文件有 foreach 的结尾,所以它不起作用:
主脚本:
if ($conditionMet) include('begin.php');
echo 'blablabla';
... do more stuff
if ($conditionMet) include('end.php');
开始.php:
foreach (array(1,2,3,4) as $id):
结束.php:
endforeach;
当然是行不通的。我想可能是因为在包含 begin.php 之后 php 不知道从哪里开始在 foreach 中再次循环,但这不是因为如果我这样做它会起作用:
if ($conditionMet) eval('foreach (array(1,2,3,4) as $id):');
echo 'blablabla';
if ($conditionMet) eval('endforeach;');
不能用eval写这样的代码,我不喜欢用eval,另外我还有更多的代码要放在begin.php和end.php中
更新:
似乎对我为什么要这样做以及代码的目的感到困惑。我认为简化代码以获得直接的解决方案会更好,但看起来我只会让它变得更糟,所以我将解释更多:
如果您忘记了这两个if
主脚本,那么该行echo 'bablabla;
实际上是很多代码,其中还有一个 foreach 循环,它们通过关联数组并输出正确的 html。例如,数组将是这样的:
array(
array('product'=>'carrot', 'price'=>5),
array('product'=>'onion', 'price'=>4),
array('product'=>'apple', 'price'=>2)
);
现在在某些情况下,数组会略有不同,如下所示:
array(
array('product'=>'carrot', 'price'=>5, 'category'=>'vegetable'),
array('product'=>'onion', 'price'=>4, 'category'=>'vegetable'),
array('product'=>'apple', 'price'=>2, 'category'=>fruit')
);
这是$conditionMet
真的,所以在“begin.php”中,它像这样重建数组:
foreach ( regorganizeArray($productsArray) as $productsArray)
成为
array(
array(
array('product'=>'carrot', 'price'=>5, 'category'=>'vegetable'),
array('product'=>'onion', 'price'=>4, 'category'=>'vegetable'),
),
array('product'=>'apple', 'price'=>2, 'category'=>fruit')
)
);
然后将显示额外的东西,例如
<h4>vegetables</h4>
然后主脚本的其余部分与主脚本无缝执行,只显示数组的内容,甚至不知道有什么区别。
最后,“end.php”结束了foreach。
现在你可能都在想我应该把主脚本的代码放在一个函数中,但是它有几个版本(主题),他们从来没有做确切的事情。所有不同版本的主脚本唯一的共同点是输入数组是相同的。
好了,抱歉所有的混乱,我不会是一个真正的好老师,因为我不善于解释,但我希望这能让事情更清楚。