Ich habe eine Liste von Hosts mit Schnittstellen. Der Code muss die doppelten Schnittstellen für jeden Host zählen. Schließlich muss der Code auch die doppelte Schnittstelle X-mal für jeden Host anzeigen.
Ich stelle diese Frage, weil ich Benachrichtigungen senden möchte, dass der X-Host mit einer oder mehreren ausgefallenen Schnittstellen ausgefallen ist.
$data = array( array("192.168.0.1","eth1"), array("192.168.0.2","eth2"), array("192.168.0.3","eth3"), array("192.168.0.1","eth1"), array("192.168.0.4","eth1"), array("192.168.0.2","eth5") );
Ich bin hier anderen Beispielen gefolgt, aber die meisten sind einfache Arrays, oder wenn es sich um ein mehrdimensionales Beispiel handelt, sind die Beispiele nicht ähnlich.
Ich habe es schon ausprobiert...
<?php $data = array( array("192.168.0.1","eth1"), array("192.168.0.2","eth2"), array("192.168.0.3","eth3"), array("192.168.0.1","eth1"), array("192.168.0.4","eth1"), array("192.168.0.2","eth5") ); $counter_data = count($data); $duplicated_host = array_filter(array_count_values(array_column($data, 0)), function($v) { return $v > 1; }); print_r($duplicated_host); print ("<br>"); $duplicated_host_keys = (array_keys($duplicated_host)); for ($row_num = 0; $row_num < $counter_data; $row_num++) { $host = $data[$row_num][0]; $interface = $data[$row_num][1]; if (in_array($host,$duplicated_host_keys)) { print($host . " " . $interface . "<br>"); } }
Der obige Code ist falsch, er funktioniert einigermaßen, aber es ist nicht das, was ich erwartet habe ... Gibt es eine einfache Möglichkeit, dies zu tun?
Die endgültige Ausgabe sollte so aussehen:
Host 192.168.0.1 has eth1 repeated 2 times. --> For current data only Host 192.168.0.1 has eth9 repeated 5 times. Host 192.168.0.4 has eth1 repeated 9 times.
这可能就是您正在寻找的:
输出为:
您需要对两个分组进行分组,首先是主机,然后是接口。
然后您可以循环此分组数组以显示/发送输出:
在线试用!
NIC -->“网络接口卡”