我在我的代码中遇到了2个变量。我有一个if语句,它位于for循环中。当if语句在for循环中执行时,我的两个变量应该相应地改变,但它们不会。我的代码中没有函数,因此所有变量都在全局范围内。
这是我的代码:
$file = file("../../manpages/structure.txt");
$topicindex = 0;
$topiclineindex = 0;
for($x = 0; count($file) > $x; $x++){
$data = explode(",",$file[$x]);
$structure[$topicindex][$topiclineindex] = $file[$x];
echo '[' . $topicindex . ',' . $topiclineindex . ']';
$topiclineindex += 1;
if ($data[0] == "ENDTOPIC") {
echo "NEXT TOPIC";
$topicindex += 1;
$topiclineindex = 0;
}
}
print_r($structure);
这是浏览器中的输出:
[0,0][0,1][0,2][0,3][0,4][0,5][0,6][0,7]NEXT TOPICArray ( [0] => Array ( [0] => TOPIC,Topic 1 [1] => SUBTOPIC,Sub Topic 1,intro.txt [2] => SUBTOPIC,Sub Topic 2,intro.txt [3] => ENDTOPIC [4] => TOPIC,Topic 2 [5] => SUBTOPIC,Sub Topic 21,intro.txt [6] => SUBTOPIC,Sub Topic 22,intro.txt [7] => ENDTOPIC ) )
这是structure.txt的内容
TOPIC,Topic 1
SUBTOPIC,Sub Topic 1,intro.txt
SUBTOPIC,Sub Topic 2,intro.txt
ENDTOPIC
TOPIC,Topic 2
SUBTOPIC,Sub Topic 21,intro.txt
SUBTOPIC,Sub Topic 22,intro.txt
ENDTOPIC
非常感谢任何和所有建议。
编辑:我已经测试了一些,似乎新分配的值不会转义if语句。在for循环的下一次迭代中,$topicindex
和$topiclineindex
在if语句被删除之前返回到先前迭代的先前值。
答案 0 :(得分:1)
您的IF语句仅针对最后一行执行,因为第一个ENDTOPIC实际上是" ENDTOPIC \ n"。 有关新行标志
的详细信息,请参阅http://php.net/manual/en/function.file.php答案 1 :(得分:0)
替换
if ($data[0] == "ENDTOPIC") {
与
if (trim($data[0]) == "ENDTOPIC") {
这样就可以了。 您的IF语句仅针对最后一行执行,因为第一个ENDTOPIC实际上是“ENDTOPIC \ n”
trim()函数条“\ n”