我有一个.txt文件,其中包含遵循标准约定的行。我可以将.txt文件的每一行都读成数组,但我不能拆分每行中的空格并将每个单词放入一个新数组中,以列出每行的第一项。
Access.txt
2014-03-16 13:57:35.089 -0700 Information 98
2014-03-16 13:57:35.089 -0700 Information 22
2014-03-16 13:57:35.355 -0700 Information 638
2014-03-16 13:57:35.355 -0700 Information 94
LogsModel:
public function fileGetContents()
{
$filename = 'C:/Program Files/FileMaker/FileMaker Server/Logs/Access.log';
// Open the file
$fp = @fopen($filename, 'r');
// Add each line to an array
if ($fp) {
$lines = explode("\n", fread($fp, filesize($filename)));
// split each line by " "
foreach($lines as $line){
$line_items = explode(" ", $line);
return $line_items;
}
}
}
LogsController:
public function index()
{
// load a model, perform an action, pass the returned data to a variable
$logs_model = $this->loadModel('LogsModel');
$line_items = $logs_model->fileGetContents();
// load views.
require 'application/views/_templates/header.php';
require 'application/views/home/index.php';
require 'application/views/_templates/footer.php';
}
家/ index.php的
<table class="table table-striped">
<tr>
<td>Date</td>
</tr>
<?php foreach ($line_items as $item) { ?>
<tr>
<td><?php echo $item ?></td>
</tr>
<?php } ?>
</table>
现在我从第一行获得所有项目......
DATE
2014-03-16
13:57:35.089
-0700
Information
98
我想要显示的是 EACH 行中的第一项......
DATE
2014-03-16
2014-03-16
2014-03-16
2014-03-16
答案 0 :(得分:1)
非常简单:
$line_items = explode(" ", $lines[0]); //split first line
echo $line_items[0]; //print first item
如果您只想要一行中的一项,为什么您的方法称为fileGetContents()
?您尝试将整个文件作为一行返回,不断循环。不会工作。您需要重新设计此方法。
答案 1 :(得分:0)
您的问题出在LogsModel中。
1)您需要将return $line_items;
放在foreach(...){...}
之外。
现在它位于内部并阻止foreach
完成第一个循环并以第二个循环开始。
2)你不需要整个爆炸阵列,只需要第一位。
3)在foreach
内需要继续将第一位添加到数组中。
所以最后,你需要改变:
foreach($lines as $line){
$line_items = explode(" ", $line);
return $line_items;
}
成:
$line_items = array();
foreach($lines as $line){
$tmp = explode(" ", $line);
$line_items[] = $tmp[0];
}
return $line_items;
答案 2 :(得分:0)
Explode返回一个数组,因此您需要返回第一部分:
public function fileGetContents()
{
$filename = 'C:/Program Files/FileMaker/FileMaker Server/Logs/Access.log';
// Open the file
$fp = @fopen($filename, 'r');
$line_items = array();
// Add each line to an array
if ($fp) {
$lines = explode("\n", fread($fp, filesize($filename)));
// split each line by " "
foreach($lines as $line){
$l = explode(" ", $line);
$line_items[] = $l[0];
}
}
return $line_items;
}