{time} | {name} | {value1}
{time} | {name} | {value2}
{time} | {name2} | {value3}
{time} | {name3} | {value4}
{time} 是“自 Unix 纪元以来的秒数”中的时间戳
日志文件是逐行写入的,因此最新的日志行位于底部,
我正在尝试将这些值分类到 php 数组中....
假设我们有
{time} | Steve | Pizza
{time} | Steve | Kebab
{time} | Steve | Burger
{time} | John | Kebab
{time} | John | Ice-Cream
{time} | Dave | Pizza
{time} | Derek | Ice-Cream
{time} | Derek | Fanta
我已经爆炸成数组$lines
这就是我可以用来获取变量的方法....
echo $lines[0][1] . "," . $lines[0][2]; // this will print ' Steve,Pizza '
echo $lines[3][2]; // this will print ' Kebab '
我正在尝试使用“$lines[$x][1]”作为数组键和“$lines[$x][2]”作为数组值来编写数组,以便我可以调用:
print_r($new_array);
获得:
array
(
[Steve] => Pizza
=> Kebab
=> Burger
)
(
[John] => Kebab
=> Ice-Cream
)
(
[Dave] => Pizza
)
(
[Derek] => Ice-Cream
=> Fanta
)
这样做的原因是我需要显示一个小桌子,看起来像这样....
_________________________________________
| Steve | Pizza |
| | Kebab |
|___________________|_____ Burger ________|
| John | Kebab |
|___________________|_____ Ice-Cream _____|
|______ Dave _______|_____ Pizza _________|
| Derek | Ice-Cream |
|___________________|_____ Fanta _________|
数组 $lines 已被格式化以删除所有早于 24 小时的“日志行”....
所以我认为我不需要限制数组键 {names} 的数量
提前感谢您的任何建议....已为此尝试了所有逻辑解决方案:rant:
$new = array();
foreach($lines as $line)
{
$new[$line[1]][] = $line[2];
}
print_r($new);
由 DJ-P.I.M.P 编辑...
$new = array();
foreach($lines as $line)
{
$new[$line[1]][] = $line[2];
}
// print_r($new);
foreach($new as $key => $news) {
echo $key . "<br>";
foreach($news as $k => $v) {
echo $news[$k] . "<br>";
}
}
这完全符合我的问题所问的......感谢@Aaron 的最初想法:)
$result = array();
for ($lines as $line) {
if (!isset($result[$line[1]])) {
$result[$line[1]] = array();
}
$result[$line[1]][] = $line[2];
}
fscanf()
解析分隔的日志文件行并将数据保存在所需的组中。演示
$result = [];
$handle = fopen('some.log', 'r');
while (fscanf($handle, '%*s | %s | %s', $name, $item)) {
$result[$name][] = $item;
}
fclose($handle);
var_export($result);
输出:
array (
'Steve' =>
array (
0 => 'Pizza',
1 => 'Kebab',
2 => 'Burger',
),
'John' =>
array (
0 => 'Kebab',
1 => 'Ice-Cream',
),
'Dave' =>
array (
0 => 'Pizza',
),
'Derek' =>
array (
0 => 'Ice-Cream',
1 => 'Fanta',
),
)