我正在努力尝试变成一个基本的 | 分离的文件,看起来像这样:
10.10.0.139|1623778800.0631|20210615 13:40:00|783||test.php|||用户登录结束|0.2406407635352 10.10.0.139|162061072|162061072|162061072|162061072用户登录结束|0.34064078330994 10.10.0.139|1623778800.0631|20210615 13:40:00|783||test.php||index.php|用户调用结束|0.506192438888
变成看起来像这样的东西:
[0] => Array
(
[test.php|||end of user login] => 0.2406407635352
)
[1] => Array
(
[test.php|||end of user login] => 0.34064078330994
)
[2] => Array
(
[test.php||index.php|end of User call] => 0.50612878799438
)
这样我就可以遍历文件并获取键、计数、最小值、最大值和平均值。到目前为止,我的代码如下所示:
<?php
$arrayContent = file("test.txt");
$returnArray = array();
$i = 0;
foreach($arrayContent as $row){
// echo $row;
$returnArray[$i++] = explode("|", $row);
}
$contentArray = array();
foreach($returnArray as $row) {
$key = $row[5] . '|' . $row[6] . '|' . $row[7] . '|' . $row[8];
$time = $row[9];
$contentArray[$key] = $time;
}
ksort($contentArray);
?>
当我 print_r($contentArray) 我会得到这个:
Array
(
[soap.php|||end of User call] => 0.50612878799438
[soap.php|||end of user login] => 0.34064078330994
)
它似乎采用用户登录结束的最后一个值并且没有三行 - [soap.php|||用户登录结束] 2行,[soap.php|||用户调用结束] 1行
我的最终目标是将输出放入一个文本文件中,如下所示:
Key Count Min Max Avg
[soap.php|||end of user login], 2, 0.2406407635352, 0.34064078330994, 0.29064077342257
[soap.php|||end of User call], 1, 0.50612878799438, 0.50612878799438, 0.50612878799438
您的代码将键的值设置为在文件中找到的上次匹配时间值,看起来您希望为每个键设置一个值数组。你也太努力了 IMO,让我们fgetcsv
为你工作。
<?php
$handle = fopen('test.csv', 'r');
$contentArray = [];
while (($row = fgetcsv($handle, 0, '|')) !== false)
{
$key = $row[5] . '|' . $row[6] . '|' . $row[7] . '|' . $row[8];
if(!array_key_exists($key, $contentArray))
{
$contentArray[$key] = [];
}
$time = $row[9];
$contentArray[$key][] = $time;
}
fclose($handle);
ksort($contentArray);
foreach($contentArray as $key=>$data)
{
echo '['.$key.'], '.implode($data, ', ').PHP_EOL;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句