PHP文本文件中的多维数组

时间:2014-03-12 04:05:44

标签: php arrays multidimensional-array

在这里寻求一些帮助。 我试图解析空格分隔的文本文件,并创建一个多维数组。数据文件是Apache2日志文件,但经验适用于许多文本文件。

我尝试做的是读取记录(一行),然后: 1.提取源IP地址。 2.检查之前是否已经看过此IP地址。 3.提取数据包的目标端口。 4.总结此IP地址将数据包发送到此端口的次数。

概念上说:

     SRC-IP PORT SUM
-----------------------------------
 111.222.111.222 - 22 - 3次
 232.1.45.8 - 23 - 23次
                  - 80 - 1次
                  - 5353 - 2次
 217.163.132.190 - 23 - 12次

我可以打开文件并解压缩源ip,检查以确保它是唯一的,如果是,则将其放入数组中。我无法弄清楚如何添加目标端口,作为阵列中的第二个字段,更不用说如何将所述目标端口的计数添加为数组中的第三个字段。  我在www.php.net上找到的所有例子都过于简单,基本上只是手工填充多维数组。似乎没有显示如何创建多维数组,然后解释如何以编程方式填充维度。

以下是脚本: `

 if (($handle = fopen("firewall", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, " ")) !== FALSE) {
            if(!in_array($data[8], $src_ip)){
                    array_push($src_ip, $data[8]);
            }
            foreach($data as $value){
                    if(strstr($value, $dest_port)){
 // --> where I'm stuck     array_push($src_ip[][], $value);
                            print($data[8]). " ";
                            print($value)."\n";
                    }
            }
            $row++;
    }
}
fclose($handle);
$unique_ip = count($src_ip);
print("$row dropped packets from $unique_ip unique ip addresses.\n");
?>`

这是输出的最后一行:  1154从302个唯一的IP地址中丢弃了数据包。

如果我正在使用的数据块有用,请告诉我。  它只是一个防火墙日志。

任何帮助都将不胜感激。  干杯,  特里。

1 个答案:

答案 0 :(得分:0)

更新:

if (($handle = fopen("firewall", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, " ")) !== FALSE) {
        if (!isset($src_ip[$data[8]])) {
            $src_ip[$data[8]] = array();
        }
        foreach ($data as $value) {
            if (strstr($value, $dest_port)) {
                if (!isset($src_ip[$data[8]][$value]))
                    $src_ip[$data[8]][$value] = array('count' => 0);

                $src_ip[$data[8]][$value]['count'] += (int)$THIS_ROWS_COUNT;
                print($data[8]) . " ";
                print($value) . "\n";
            }
        }
        $row++;
    }
}