我有一個這樣的陣列。這是一些設備到 Internet 的連接日志。
Array
(
[0] => Array
(
[src_ip] => x
[src_port] => 48755
[dst_ip] => y
[dst_port] => 443
[device_id] => 22040
)
[1] => Array
(
[src_ip] => x
[src_port] => 48754
[dst_ip] => y
[dst_port] => 443
[device_id] => 22040
)
[2] => Array
(
[src_ip] => z
[src_port] => 443
[dst_ip] => x
[dst_port] => 54267
[device_id] => 22040
)... more than 1000 row!)
源 IP:[src_ip] 和目標 IP:[dst_ip] 基于發送或接收連接狀態改變它們的位置。我們不知道當前的網路狀態(發送/接收),我們也不知道設備的當前 IP。設備的 IP 是固定的,但有時它放在 [src_ip] 上,有時放在 [dst_ip] 中
但是我們可以在所有子陣列(行)的 [src_ip] 或 [dst_ip] 中看到重復和連續出現的 IP,這些子陣列(行)向我們展示了通信設備的 IP。如何使用 PHP 在這個陣列中找到設備的 IP?(例如,前 100 行中重復次數最多的 IP)
我們不能使用 IP 地址范圍。
uj5u.com熱心網友回復:
您可以使用 提取值array_column,然后使用array_count_values和最后計算值,max用于最常用的 IP。
一個例子:
<?php
$src = array_column($connections, 'src_ip');
$dst = array_column($connections, 'dst_ip');
$count = array_count_values(array_merge($src, $dst));
$max = array_keys($count, max($count));
print_r($count);
print_r($max);
uj5u.com熱心網友回復:
$data = [
[ 'src_ip' => '5B---45A', 'src_port' => 48755, 'dst_ip' => '0A---223', 'dst_port' => 443, 'device_id' => 22040 ],
[ 'src_ip' => '5B---45A', 'src_port' => 48754, 'dst_ip' => '0A---223', 'dst_port' => 443, 'device_id' => 22040 ],
[ 'src_ip' => '11---D2B', 'src_port' => 443, 'dst_ip' => '5B---45A', 'dst_port' => 54267, 'device_id' => 22040 ],
[ 'src_ip' => '11---D2B', 'src_port' => 443, 'dst_ip' => '5B---45A', 'dst_port' => 54267, 'device_id' => 22039 ],
[ 'src_ip' => '11---D2B', 'src_port' => 443, 'dst_ip' => '0A---223', 'dst_port' => 54267, 'device_id' => 22040 ]
];
如果device_id不相關:
$section = array_slice($data, 0, 99);
$result = array_count_values([ ...array_column($section, 'src_ip'), ...array_column($section, 'dst_ip') ]);
print_r($result);
輸出:
Array
(
[5B---45A] => 4
[11---D2B] => 3
[0A---223] => 3
)
如果device_id很重要,請先對其進行過濾:
$section = array_slice(array_filter ($data, fn($item) => $item['device_id'] === 22040), 0, 99);
$result = array_count_values([ ...array_column($section, 'src_ip'), ...array_column($section, 'dst_ip') ]);
print_r($result);
輸出:
Array
(
[5B---45A] => 3
[11---D2B] => 2
[0A---223] => 3
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/443245.html
