PHP - explode或preg_split来排列数组

时间:2018-05-04 23:03:09

标签: php regex

我对数组有一些问题

我有一个.txt文件,我将其添加到带有

的php文件中
$file = file_get_contents('data.txt');

data.txt包含以下格式的列表:

<info1 info2 0.10s [info: info] 10.10.10.10:80>
<info1 info2 0.10s [info: info, info] 10.10.10.10:80>
<info1 info2 0.10s [info:80, info:25] 10.10.10.10:80>
<info1 info2 0.10s [info: info, info, info:80, info:25] 10.10.10.10:80>
and so on

然后我正在使用:

$lines = explode("\n", $file);

我可以使用

代替使用explode和file_get_contents
$lines = file('data.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

如果我这样做:

echo '<pre>';
print_r ($lines);
echo '</pre>';

我得到这个数组

Array
(
    [0] => 
    [1] => 
    [2] => 
    [3] => 
    ....
)

我正在努力让阵列看起来像这样我可以预先显示信息或将其添加到数据库中

Array 
(

info1
info2
time
info *whats inside the []
ip

)

非常感谢任何帮助。提前感谢您对此进行调查!

首先,我正在努力争取工作

foreach($lines as $line => $data)
{
$lines_data = explode(' ', $data); //here i've tried to use preg_split with regex and i'm unable to get it to work

$info[$line]['info1'] = $lines_data[0];
$info[$line]['info2'] = $lines_data[1];
$info[$line]['time'] = $lines_data[2];
$info[$line]['info'] = $lines_data[3];
$info[$line]['ip'] = $lines_data[4];

echo ' info1: ' . $info[$line]['info1'] . '<br />';
echo ' info2: ' . $info[$line]['info2'] . '<br />';
echo ' time: ' . $info[$line]['time'] . '<br />';
echo ' info: ' . $info[$line]['info'] . '<br />';
echo ' ip: ' . $info[$line]['ip'] . '<br />';
}

它不能以这种方式工作因为 爆炸('',$ data); 按空格分割,我在[]

之间也有空格

1 个答案:

答案 0 :(得分:0)

试试这个:

<?php
$lines = file('data.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach($lines as $line) {
    preg_match('#<(\w+)\s(\w+)\s(.+)\s\[(.+)\]\s(\d+\.\d+\.\d+\.\d+:\d+)>#', $line, $match);

    $info[] = [
        'info1' => $match[1],
        'info2' => $match[2],
        'time' => $match[3],
        'info' => $match[4],
        'ip' => $match[5],
    ];
}

print_r($info);

很可能不会对您的真实数据起作用,但我已经要求提供示例行,但似乎被忽略了。

https://3v4l.org/62UaD

<强>结果:

Array
(
    [0] => Array
        (
            [info1] => info1
            [info2] => info2
            [time] => 0.10s
            [info] => info: info
            [ip] => 10.10.10.10:80
        )

    [1] => Array
        (
            [info1] => info1
            [info2] => info2
            [time] => 0.10s
            [info] => info: info, info
            [ip] => 10.10.10.10:80
        )

    [2] => Array
        (
            [info1] => info1
            [info2] => info2
            [time] => 0.10s
            [info] => info:80, info:25
            [ip] => 10.10.10.10:80
        )

    [3] => Array
        (
            [info1] => info1
            [info2] => info2
            [time] => 0.10s
            [info] => info: info, info, info:80, info:25
            [ip] => 10.10.10.10:80
        )

)