如何从分号分隔的txt文件中获取第二列?

时间:2015-05-16 06:45:21

标签: php arrays file

我在文本文件中有一些数据,例如:

02.02.2015;17:03;86;Normal;----;2
02.02.2015;17:07;3;Normal;----;2
02.02.2015;17:07;61;Normal;----;1
02.02.2015;18:04;66;Normal;----;2
02.02.2015;19:26;37;Normal;----;2
02.02.2015;21:17;57;Normal;----;1
03.02.2015;07:17;54;Normal;----;2
03.02.2015;07:17;48;Normal;----;2
03.02.2015;07:17;38;Normal;----;2
03.02.2015;07:17;4;Normal;----;2
03.02.2015;07:17;80;Normal;----;2
03.02.2015;07:17;66;Normal;----;2
03.02.2015;07:17;97;Normal;----;2

我已经显示了这条记录。我只需要时间行,但我想在数组中选择时间,如:

07:40 as $string[0];
07:42 as $string[1];
07:43 as $string[1];

我试过了:

$string = array();
foreach($Zeit as $key => $time) {
    $string[] = $time; 
}
  echo  $string[0];

但代码显示错误如:

  

为foreach()提供的参数无效
  注意:未定义的偏移量:// $ string

中的0

这是我目前的代码:

$file = "0215.txt";
if (($handle = fopen($file, "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        $num = count($data);

        $Datum = $data[0]; // Date
        $Zeit = $data[1]; // Time
        $Pers_Nr = $data[2]; // Person number
        $Art = $data[3]; // Non-use
        $Eingabe = $data[4]; // Non-use
        $Terminal = $data[5]; // Non-use

        if($Datum == '02.02.2015' && $Pers_Nr == '17'){

             echo $Zeit.'<br>';

            /*  $string = array();
                foreach($Zeit as $key => $time){
                    $string[] = $time; 
                }
                echo  $string[0];    */
        }
    }
    fclose($handle);
}

我怎样才能将文件中的第二列抓取到一个数组中? (请注意,我只想在特定条件下获取值:if($Datum == '02.02.2015' && $Pers_Nr == '17')

1 个答案:

答案 0 :(得分:1)

这应该适合你:

只需将您的文件读入包含file()的数组,然后将array_map()explode()的所有行循环遍历;作为分隔符,并返回第二个索引

<?php

    $lines = file("test.txt");
    $times = array_map(function($v){
        return explode(";", $v)[1];
    }, $lines);

    print_r($times);

?>

输出:

Array
(
    [0] => 17:03
    [1] => 17:07
    [2] => 17:07
    //...
    [10] => 07:17
    [11] => 07:17
    [12] => 07:17
)

修改

如果你想追加一个条件,当你想要抓住时间而不想时,只需将它添加到array_map()的匿名函数中,并为你不想要的那些时间返回一个空字符串,以便您可以使用array_filter()过滤掉这些值:

$times = array_filter(array_map(function($v){
    $data = explode(";", $v);
    if(strcmp($data[0], "02.02.2015") === 0 && $data[2] == "3")
        return $data[1];
    return "";
}, $lines));