2010-11-06 98 views
1

我想讀一個格式化的文件PHP讀取文件

name(讀取到這個變量)

10 10(讀成獨立的變量)

,其餘爲陣列

line 

line 

line 

line 

來澄清這是一個上傳腳本,我已經完成了,當用戶上傳一個格式化的文件時,它以上述方式讀取它

$fname = 'test.txt'; 

$lines = file("$fname", "r"); 

while($lines as $currenline){ 

I am trying to put the name, width, height into variables 
    then the rest into the array 

} 

將這種幫助

回答

0

$lines已經幾乎包含了你所需要的,只是拉了相關作品。

$fname = 'test.txt'; 
$lines = file("$fname", "r"); 
$name = $lines[0]; 
list($height, $width) = explode(' ', $lines[1]); 
$lines = array_slice($lines, 2); 

請注意,這沒有任何錯誤檢查,因此您可能需要添加一些。

正如意見建議,你也可以做到這一點使用array_shift

$fname = 'test.txt'; 
$lines = file("$fname", "r"); 
$name = array_shift($lines); 
list($height, $width) = explode(' ', array_shift($lines)); 
// $lines now contains only the rest of the lines in the file. 
+0

如果你使用'array_shift($線)'代替'$行[0]'和'$線[1]',你可以擺脫'array_slice()'的。 – 2010-11-06 15:43:34

+0

您還使用array_shift操作數組3次而不是一次。 – smack0007 2010-11-06 15:45:28

+0

@ smack0007 - 我正在訪問數組兩次,並操縱它一次,而不是操縱它3次... – 2010-11-06 15:46:34

0

不是100%肯定你問什麼,但也許這可以讓你開始:

$fname = 'test.txt'; 

$lines = file("$fname", "r"); 

foreach($lines as $line) { 
    $parts = explode(' ', $line); 
    $name = $parts[0]; 
    $width = $parts[1]; 
    $height = $parts[2]; 

    // Do whatever you want with the line data here 
} 

它假設所有輸入行格式正確。

+0

再次閱讀問題後,我認爲Mark E的答案就是您要找的答案。 – smack0007 2010-11-06 15:43:28

0
$fh = fopen($fname, 'r'); 

$name = fgets($fh); 
$dimensions = split(' ', fgets($fh)); 
$length = $dimensions[0]; 
$width = $dimensions[1]; 

$lines = array(); 

while ($line = fgets($fh) $lines[] = $line; 

我從來沒有測試過,但它應該工作,如果你的文件是恆定的。 while循環可能關閉,如果它不起作用需要重新工作,請記住,如果發生錯誤或無法讀取文件,則fgets將返回false。