无法从txt文件中读取

时间:2016-04-16 15:25:26

标签: php

这是我遇到的一个具体问题,无法理解我做错了什么。不要因为“可能重复”而再次标记此问题,因为我知道如何打开和打印文件。这不是我要求的。

这是我的txt文件:

onceagain|Tristam - Once Again.mp3|gh|Tristam|Once Again;
seksikeks|AContrari - SEKS I KEKS.mp3|dubstep|AContrari|SEKS I KEKS;
blue|Au5 Fractal - Blue.mp3|drumstep|Au5 & Fractal|Blue;
airplanes|B.O.B - Airplanes (Feint Remix).mp3|dnb|B.O.B.|Airplanes (Feint Remix);
sea|Camellia - Flying in the Flow of Deep-Sea.mp3|dubstep|Camellia|Flying in the Flow of Deep-Sea;
onslaught|CENOB1TE - Onslaught.mp3|dubstep|CENOB1TE|Onslaught;
snakeeyes|Feint - Snake Eyes (feat. CoMa).mp3|drumstep|Feint|Snake Eyes (feat. CoMa);
wontbealone|Feint - We Won't Be Alone (feat. Laura Brehm).mp3|dnb|Feint|We Won't Be Alone (feat. Laura Brehm);
vine|Tristam - The Vine.mp3|drumstep|Tristam|The Vine;
frameofmind|Tristam & Braken - Frame of Mind.mp3|dnb|Tristam & Braken|Frame of Mind;
heist|Noisestorm - Heist.mp3|trap|Noisestorm|Heist;

我可以打印掉everthing,但我想使用for循环打印出来,因为我将在以后将所有内容放在单独的变量中:

$myfile = fopen("songs.txt", "r");
$songs = fread($myfile,filesize("songs.txt"));
$lines = count(file("songs.txt")) - 1;

for ($x = 0;  $x <= $lines; $x++) {
    echo strtok($songs, ";");
    $songs = strstr($songs, ';');
}

不幸的是,这就是我收到的输出:

onceagain|Tristam - Once Again.mp3|gh|Tristam|Once Again
seksikeks|AContrari - SEKS I KEKS.mp3|dubstep|AContrari|SEKS I KEKS
seksikeks|AContrari - SEKS I KEKS.mp3|dubstep|AContrari|SEKS I KEKS
seksikeks|AContrari - SEKS I KEKS.mp3|dubstep|AContrari|SEKS I KEKS
seksikeks|AContrari - SEKS I KEKS.mp3|dubstep|AContrari|SEKS I KEKS
seksikeks|AContrari - SEKS I KEKS.mp3|dubstep|AContrari|SEKS I KEKS
seksikeks|AContrari - SEKS I KEKS.mp3|dubstep|AContrari|SEKS I KEKS
seksikeks|AContrari - SEKS I KEKS.mp3|dubstep|AContrari|SEKS I KEKS
seksikeks|AContrari - SEKS I KEKS.mp3|dubstep|AContrari|SEKS I KEKS
seksikeks|AContrari - SEKS I KEKS.mp3|dubstep|AContrari|SEKS I KEKS
seksikeks|AContrari - SEKS I KEKS.mp3|dubstep|AContrari|SEKS I KEKS

我需要修复它。

1 个答案:

答案 0 :(得分:1)

您始终可以使用explode()来分解文件。爆炸用分隔符分隔,然后将数据放入数组中。然后,您可以遍历此数组并打印出数据。

<?php
$myfile = fopen("songs.txt", "r");
$songs = fread($myfile,filesize("songs.txt"));
$lines = count(file("songs.txt")) - 1;

$songs = explode(";",$songs);

for ($x = 0;  $x <= $lines; $x++) {
    echo $songs[$x]."<br>";
}

使用原始解决方案:

您的问题是因为您最后没有删除分号。使用strstr()时,针留在结果中。在你的通行证上,你正确分割,得到歌曲并打印出来,然后当你使用strstr()时删除第一首歌,然后留下你:

;
seksikeks|AContrari - SEKS I KEKS.mp3|dubstep|AContrari|SEKS I KEKS;
blue|Au5 Fractal - Blue.mp3|drumstep|Au5 & Fractal|Blue;
...

然后在下一个传递中你会得到下一首歌,seksikeks并打印它,但是当你使用strstr()时,它会找到分隔符作为第一个字符,因此不会删除任何内容。这就是为什么它继续打印,因为没有删除该行,变量$songs保持不变,如上所示。

下面的代码解决了问题:首先删除歌曲,然后删除分号,您可以正确迭代。

$myfile = fopen("songs.txt", "r");
$songs = fread($myfile,filesize("songs.txt"));
$lines = count(file("songs.txt")) - 1;

for ($x = 0;  $x <= $lines; $x++) {
    $song = strtok($songs, ";");
    echo $song;
    $songs = strstr($songs, $song);
    $songs = strstr($songs, ';');
}

以下是您在评论中要求的代码:

<?php
$myfile = fopen("songs.txt", "r");
$songs = fread($myfile,filesize("songs.txt"));
$lines = count(file("songs.txt")) - 1;

$songs = explode(";",$songs);

$result = array();

for ($x = 0;  $x <= $lines; $x++) {
    $song = explode('|',$songs[$x]);
    $songHandle = $song[0]; // First item is array item name
    $songArray = array(); // Create an array and assign properties to it
    $songArray['file'] = $song[1]; 
    $songArray['genre'] = $song[2];
    $songArray['artist'] = $song[3];
    $songArray['title'] = $song[4];
    $result[$songHandle] = $songArray; // Add our array to the the result
}

var_dump($result); // Show our result