PHP,从文件中分解数据

时间:2013-12-29 13:50:55

标签: php explode

我在从文件中爆炸数据时遇到了问题。 我的文件看起来像

  

04-21-1991 9:09 58 10004-21-1991 9:09 33 00904-21-1991 9:09 34 01304-21-1991 17:08 62 11904-21-1991 17:08 33 00704- 21-1991

我想像

那样从中爆炸数据

04-21-1991 9:09 58 100

04-21-1991 9:09 33 009

04-21-1991 9:09 34 013

04-21-1991 17:08 62 119

04-21-1991 17:08 33 007

我到现在所做的是获得一个数组(数字不同,因为文件不同,但结构是相同的)

    array(1) {
  [0]=>
  array(901) {
    [0]=>
    string(10) "07-21-1990"
    [1]=>
    string(5) "06:43"
    [2]=>
    string(2) "58"
    [3]=>
    string(14) "202
07-21-1990"
    [4]=>
    string(5) "07:03"
    [5]=>
    string(2) "33"
    [6]=>
    string(12) "4
07-21-1990"

这是我的代码

header("Content-type:text/plain");
  $file = fopen("data/data-03", "r");

$result = array();
    $file = explode("   ", file_get_contents("data/data-03"));
    foreach ( $file as $content ) 
        {
            $result[] = array_filter(array_map("trim", explode("    ", $content)));
        }
    var_dump($result);

3 个答案:

答案 0 :(得分:2)

您可能想尝试使用preg_match_all()。像这样:

<?php
$string = "04-21-1991 9:09 58 10004-21-1991 9:09 33 00904-21-1991 9:09 34 01304-21-1991 17:08 62 11904-21-1991 17:08 33 00704-21-1991";

preg_match_all("/([\d]{2}-[\d]{2}-[\d]{4}\s[\d]*:[\d]{2}\s[\d]{2}\s[\d]{3})/", $string, $matches);

print_r($matches);

?>

上面的代码将输出:

Array ( [0] => 04-21-1991 9:09 58 100 [1] => 04-21-1991 9:09 33 009 [2] => 04-21-1991 9:09 34 013 [3] => 04-21-1991 17:08 62 119 [4] => 04-21-1991 17:08 33 007 )

答案 1 :(得分:0)

这是一个简单的代码,假设您的初始数据格式不会改变。

$str = "04-21-1991 9:09 58 100 04-21-1991 9:09 33 009 04-21-1991 9:09 34 013 04-21-1991    17:08 62 119 04-21-1991 17:08 33 007 04-21-1991";

$result = array();
$result = explode(" ",$str);
$row = 0;

for ($i = 0; $i < sizeof($result)-1; ){
    $arr[$row]["date"] = $result[$i++];
    $arr[$row]["hour"] = $result[$i++];
    $arr[$row]["num"] = $result[$i++];
    $arr[$row]["num2"] = $result[$i++];
    $row++;
}

//check some data:
for ($i = 0; $i < 3; $i++ ){
    echo $arr[$i]["date"] . " ";
    echo $arr[$i]["hour"] . " ";
    echo $arr[$i]["num"] . " ";
    echo $arr[$i]["num2"] . " ";
    echo "<br />";
}

答案 2 :(得分:0)

您还可以通过以下方式处理爆炸数组:

$out = array();

for ( $i=0; $i<count($result); $i++){
    if ( floor($i / 4) == ($i / 4))
        $out[ floor($i / 4) ] = $result[$i];
    $out[ floor($i / 4) ] .= ' '.$result[$i]; 
}

你可以用你想要的分隔符替换'',我假设一个简单的空间。

基本上总是连接爆炸产生的数组的4个条目,并将它们添加到新数组中。你也可以在一个新的String中获取结果,只需在每个第四个条目之后以相同的方式添加\ n,如果这是你想要的。