转动 |将文件分隔成 PHP 中的关联数组
turning a | seperated file into an associative array in PHP
我正在尝试把一个基本的 |单独的文件,看起来像这样:
10.10.0.139|1623778800.0631|20210615 13:40:00|783||test.php|||用户登录结束|0.2406407635352
10.10.0.139|1623778800.0631|20210615 13:40:00|783||test.php|||用户登录结束|0.34064078330994
10.10.0.139|1623778800.0631|20210615 13:40:00|783||test.php||index.php|用户通话结束|0.50612878799438
变成这样的东西:
[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
)
它似乎采用了用户登录结束的最后一个值,并且没有三行 - 2 表示 [soap.php|||用户登录结束],1 表示 [soap.php|||用户通话结束]
我的最终目标是将输出转换为如下所示的文本文件:
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;
}
我正在尝试把一个基本的 |单独的文件,看起来像这样:
10.10.0.139|1623778800.0631|20210615 13:40:00|783||test.php|||用户登录结束|0.2406407635352 10.10.0.139|1623778800.0631|20210615 13:40:00|783||test.php|||用户登录结束|0.34064078330994 10.10.0.139|1623778800.0631|20210615 13:40:00|783||test.php||index.php|用户通话结束|0.50612878799438
变成这样的东西:
[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
)
它似乎采用了用户登录结束的最后一个值,并且没有三行 - 2 表示 [soap.php|||用户登录结束],1 表示 [soap.php|||用户通话结束]
我的最终目标是将输出转换为如下所示的文本文件:
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;
}