如何在php中将文本文件转换为数组?

时间:2017-01-15 06:18:49

标签: php arrays file text

1) 我有一个文本文件(converted.txt)和该内容的用户信息:

 0   hbhenet      pppoe   D4:CA:6D:F1:5D:5A 10.23.0.254     8h1m36s            
 1 R moh@hj       pppoe   00:27:22:16:3B:F2 10.17.0.253     8h1m36s            
 2 R omarmool@dr  pppoe   68:72:51:3A:53:1B 10.17.0.251     8h1m36s            
 3 R admin@khr2   pppoe   24:A4:3C:9F:83:10 10.17.0.252     8h1m36s            
 4 R yas@ahmed.m  pppoe   24:A4:3C:E6:DD:3E 10.17.0.250     8h1m36s            
 5 R hus@ahmed.m  pppoe   44:D9:E7:DA:32:95 10.16.0.246     8h1m36s        

2) 我在我的PHP中所做的是:

$file="converted.txt";
$fopen = fopen($file, "r");
$fread = fread($fopen,filesize($file));
fclose($fopen);

$remove = "\n";
$split = explode($remove, $fread);
$array[] = NULL;
$tab = "\t";

foreach ($split as $string)
{
    $row = explode($tab, $string);
    array_push($array,$row);
}

echo "<pre>";
print_r($array);
echo "</pre>";

3) 输出如下:

Array
(

    [0] => 
[1] => Array
    (
        [0] =>  0   hbhenet      pppoe   D4:CA:6D:F1:5D:5A 10.23.0.254     8h1m36s            
    )

[2] => Array
    (
        [0] =>  1 R moh@hj       pppoe   00:27:22:16:3B:F2 10.17.0.253     8h1m36s            
    )

[3] => Array
    (
        [0] =>  2 R omarmool@dr  pppoe   68:72:51:3A:53:1B 10.17.0.251     8h1m36s            
    )

[4] => Array
    (
        [0] =>  3 R admin@khr2   pppoe   24:A4:3C:9F:83:10 10.17.0.252     8h1m36s            
    )

[5] => Array
    (
        [0] =>  4 R yas@ahmed.m  pppoe   24:A4:3C:E6:DD:3E 10.17.0.250     8h1m36s            
    )

[6] => Array
    (
        [0] =>  5 R hus@ahmed.m  pppoe   44:D9:E7:DA:32:95 10.16.0.246     8h1m36s        
    )

 )

4) 但我想要的是:

阵列(

[0] => Array
    (
        [0] => Array
            (
                [0] => 0
                [1] => 
                [2] => hbhenet
                [3] => pppoe
                [4] => D4:CA:6D:F1:5D:5A
                [5] => 10.23.0.254
                [6] => 8h1m36s
            )
        [1] => Array
            (
                [0] => 1
                [1] => R
                [2] => moh@hj
                [3] => pppoe
                [4] => 00:27:22:16:3B:F2
                [5] => 10.17.0.253
                [6] => 8h1m36s
            )
        [2] => Array
            (
                [0] => 2
                [1] => R
                [2] => omarmool@dr
                [3] => pppoe
                [4] => 68:72:51:3A:53:1B
                [5] => 10.17.0.251
                [6] => 8h1m36s
            )
        [3] => Array
            (
                [0] => 3
                [1] => R
                [2] => admin@khr2
                [3] => pppoe
                [4] => 24:A4:3C:9F:83:10
                [5] => 10.17.0.252
                [6] => 8h1m36s
            )
        [4] => Array
            (
                [0] => 4
                [1] => R
                [2] => yas@ahmed.m
                [3] => pppoe
                [4] => 24:A4:3C:E6:DD:3E
                [5] => 10.17.0.250
                [6] => 8h1m36s
            )
        [5] => Array
            (
                [0] => 5
                [1] => R
                [2] => hus@ahmed.m
                [3] => pppoe
                [4] => 44:D9:E7:DA:32:95
                [5] => 10.16.0.246
                [6] => 8h1m36s
            )
    )
 )

任何想法? 提前谢谢。

2 个答案:

答案 0 :(得分:3)

我创建了一个名为myfile.txt的文件: -

 0   hbhenet      pppoe   D4:CA:6D:F1:5D:5A 10.23.0.254     8h1m36s            
 1 R moh@hj       pppoe   00:27:22:16:3B:F2 10.17.0.253     8h1m36s            
 2 R omarmool@dr  pppoe   68:72:51:3A:53:1B 10.17.0.251     8h1m36s            
 3 R admin@khr2   pppoe   24:A4:3C:9F:83:10 10.17.0.252     8h1m36s            
 4 R yas@ahmed.m  pppoe   24:A4:3C:E6:DD:3E 10.17.0.250     8h1m36s            
 5 R hus@ahmed.m  pppoe   44:D9:E7:DA:32:95 10.16.0.246     8h1m36s        

现在我已应用以下代码: -

<?php
$array = explode("\n", file_get_contents('myfile.txt'));

echo "<pre/>";print_r($array);

输出为: -

Array
(
    [0] =>  0   hbhenet      pppoe   D4:CA:6D:F1:5D:5A 10.23.0.254     8h1m36s            
    [1] =>  1 R moh@hj       pppoe   00:27:22:16:3B:F2 10.17.0.253     8h1m36s            
    [2] =>  2 R omarmool@dr  pppoe   68:72:51:3A:53:1B 10.17.0.251     8h1m36s            
    [3] =>  3 R admin@khr2   pppoe   24:A4:3C:9F:83:10 10.17.0.252     8h1m36s            
    [4] =>  4 R yas@ahmed.m  pppoe   24:A4:3C:E6:DD:3E 10.17.0.250     8h1m36s            
    [5] =>  5 R hus@ahmed.m  pppoe   44:D9:E7:DA:32:95 10.16.0.246     8h1m36s        
)

现在解决方法以便不需要更改文本文件中的任何内容(完整代码): -

<?php
$array = explode("\n", file_get_contents('myfile.txt'));

echo "<pre/>";print_r($array);
$new_array = array();
foreach($array as $key =>&$arr){

    if ($arr[3] !=='R'){

        $arr[3] ="_";
    }
    $parts = preg_split('/\s+/', trim($arr));
    if($parts[1] == '_'){
        $parts[1] = '';
    }
    $new_array[$key] = $parts;
}

echo "<pre/>";print_r($new_array);

注意: - 它会为您提供您向我们展示的精确所需输出(我已在本地测试过)

您在评论中提到的内容如下所示: -

<?php
$array = explode("\n", file_get_contents('myfile.txt'));

echo "<pre/>";print_r($array);
$new_array = array();
$indexed_array = Array('number','flag','name','service','mac','IP','uptime');

foreach($array as $key =>&$arr){

    if ($arr[3] !=='R'){

        $arr[3] ="_";
    }
    $parts = preg_split('/\s+/', trim($arr));
    if($parts[1] == '_'){
        $parts[1] = '';
    }
    $new_array[$key] = array_combine($indexed_array,$parts);
}

echo "<pre/>";print_r($new_array);

答案 1 :(得分:1)

    <?php
    $lines = array();
    $fopen = fopen('converted.txt', 'r');
    while (!feof($fopen)) {
        $line=fgets($fopen);
        $line=trim($line);
        $lines[]=$line;

    }
    fclose($fopen);
    $finalOutput = array();
    foreach ($lines as $string)
    {
        $string = preg_replace('!\s+!', ' ', $string);
        $row = explode(" ", $string);
        array_push($finalOutput,$row);
    }
    echo "<pre>";
    print_r($finalOutput);
    echo "</pre>";
?>

和输出

    Array
(
    [0] => Array
        (
            [0] => 0
            [1] => hbhenet
            [2] => pppoe
            [3] => D4:CA:6D:F1:5D:5A
            [4] => 10.23.0.254
            [5] => 8h1m36s
        )

    [1] => Array
        (
            [0] => 1
            [1] => R
            [2] => moh@hj
            [3] => pppoe
            [4] => 00:27:22:16:3B:F2
            [5] => 10.17.0.253
            [6] => 8h1m36s
        )

    [2] => Array
        (
            [0] => 2
            [1] => R
            [2] => omarmool@dr
            [3] => pppoe
            [4] => 68:72:51:3A:53:1B
            [5] => 10.17.0.251
            [6] => 8h1m36s
        )

    [3] => Array
        (
            [0] => 3
            [1] => R
            [2] => admin@khr2
            [3] => pppoe
            [4] => 24:A4:3C:9F:83:10
            [5] => 10.17.0.252
            [6] => 8h1m36s
        )

    [4] => Array
        (
            [0] => 4
            [1] => R
            [2] => yas@ahmed.m
            [3] => pppoe
            [4] => 24:A4:3C:E6:DD:3E
            [5] => 10.17.0.250
            [6] => 8h1m36s
        )

    [5] => Array
        (
            [0] => 5
            [1] => R
            [2] => hus@ahmed.m
            [3] => pppoe
            [4] => 44:D9:E7:DA:32:95
            [5] => 10.16.0.246
            [6] => 8h1m36s
        )

)