使用新行PHP分解文本文件中的连接字符串

使用新行PHP分解文本文件中的连接字符串,php,arrays,text-files,concatenation,explode,Php,Arrays,Text Files,Concatenation,Explode,我试着做一张桌子,从a[1-20]到J[1-20]的某种电影院座位。我有一个txt文件,其中包含保留的座位,如下所示: A2; A1; A3; A7; 如果预订了座位,桌子的颜色必须是红色。这是完整的代码: <?php $file = fopen($path,"r") or exit("cant open file"); $seat=""; while(!feof($file)) { $seat.= fgets($file); } $seat_splitted = explod

我试着做一张桌子,从a[1-20]到J[1-20]的某种电影院座位。我有一个txt文件,其中包含保留的座位,如下所示:

A2;
A1;
A3;
A7;
如果预订了座位,桌子的颜色必须是红色。这是完整的代码:

<?php 
$file = fopen($path,"r") or exit("cant open file");
$seat="";
while(!feof($file))
{
    $seat.= fgets($file);
}
$seat_splitted = explode(";",$seat);
fclose($file);

$arrTable[]="";
$letter="";
$tableContent="";

for($i = 0,$counter=0;$i<10;$i++,$counter++)
{
    if($i==0)
        $letter="A";
    else if($i==1)
        $letter="B";
    else if($i==2)
        $letter="C";
    else if($i==3)
        $letter="D";
    else if($i==4)
        $letter="E";
    else if($i==5)
        $letter="F";
    else if($i==6)
        $letter="G";
    else if($i==7)
        $letter="H";
    else if($i==8)
        $letter="I";
    else if($i==9)
        $letter="J";
?>
    <tr>
<?php
    for($j = 1;$j<21;$j++)
    {
        $arrTable[$counter]= $letter.$j;
        foreach($seat_splitted as $value)
        {
            if(strcmp($value,$arrTable[$counter])==0)
            //if($value == $letter.$j)
            {
                $GLOBALS['color']="red";
                break;
            }
            else
                $GLOBALS['color']="white";
        }
        ?>
        <td bgcolor="<?php echo $GLOBALS['color']; ?>"> <?php echo $arrTable[$counter]?> </td>
    <?php   
        $counter++;
    }
    ?>
    </tr>
<?php
}
?>

如果能抓住他们。这样连接字符串是错误的吗<代码>$seat.=fgets($file)。我该怎么做才能使它与第一个txt文件一起工作?很抱歉我的英语不好。

如果您像使用
explode
一样使用,您将获得以下数组:

["A2","\nB1","\nC3"...]
所以您必须处理
\n

也许您可以尝试一下作为
explode(;\n“,$seat)


更新:在某些系统中,您需要使用\r\n。因此,这里是正确的最终解决方案:
explode(;\r\n“,$seat)

我认为这样的解决方案应该适合您。我把一切都简化了一点

一,。首先,我创建一个包含所有座位的数组(
$seats
)。其结构如下:

Array
(
    [A] => Array
        (
            [1] => free
            [2] => free
            [3] => free
            //...
    //...
Array
(
    [A] => Array
        (
            [1] => reserved
            [2] => free
            [3] => reserved
            //...
    //...
二,。在此之后,我将文件中的所有预留座位放入一个数组中。(更好的解决方案是将所有这些数据存储在数据库中!)

三,。然后,我循环遍历每个预留座位,并将其设置为
$seats
数组中的座位,这样它就会得到如下结果:

Array
(
    [A] => Array
        (
            [1] => free
            [2] => free
            [3] => free
            //...
    //...
Array
(
    [A] => Array
        (
            [1] => reserved
            [2] => free
            [3] => reserved
            //...
    //...
四,。最后,我只是简单地打印表格

代码:


请包括您的当前输出和预期输出!(如果太大,请举一个小例子,让我们看看您想要什么和您现在拥有什么)
$seats\u splitted=file($path,file\u IGNORE\u NEW\u line | file\u SKIP\u EMPTY\u line)或退出(“无法打开文件”);数组_walk($seats_splited,function($seat){$seat=trim(seat,“;”);})仅供参考:您可以接受答案,即如何最大程度地帮助您并解决您的问题()!仅供参考:它也可能是
\r\n
.woah,它与'\r\n'一起工作,但不能赶上最后一个座位“A7”@FirmansyahRamadhan如果你在输入数据的末尾添加一行新行,你会发现它有效。@FirmansyahRamadhan你介意将我标记为最佳答案吗?哦,天哪,有这么多数组函数我以前不知道。我是php新手。非常感谢,这真的很有启发性!:)
A   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20
B   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20
C   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20
D   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20
E   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20
F   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20
G   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20
H   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20
I   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20
J   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20