PHP - 变量在它们应该的时候不会改变值

时间:2017-03-23 23:09:07

标签: php variables

我在我的代码中遇到了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语句被删除之前返回到先前迭代的先前值。

2 个答案:

答案 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”