PHP - 分解或preg_split排列数组



我对数组有一些问题

我有一个.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);

而不是使用爆炸和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工作

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(;被空格分割,我在 [ ] 之间也有空格

试试这个:

<?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
)
)

最新更新