J'ai une liste d'hôtes avec des interfaces. Le code doit compter les interfaces en double pour chaque hôte. Enfin, le code doit également afficher X fois l’interface dupliquée pour chaque hôte.
Je pose cette question parce que je souhaite envoyer des alertes indiquant que l'hôte X a échoué avec une ou plusieurs interfaces défaillantes.
$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") );
J'ai suivi d'autres exemples ici, mais la plupart sont de simples tableaux, ou s'il s'agit d'un exemple multidimensionnel, les exemples ne sont pas similaires.
Je l'ai déjà essayé...
<?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>"); } }
Le code ci-dessus est faux, il fonctionne un peu mais ce n'est pas ce à quoi je m'attendais... Y a-t-il un moyen facile de faire ceci?
Le résultat final devrait ressembler à ceci :
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.
C'est peut-être ce que vous recherchez :
Le résultat est :
Vous devez regrouper deux groupes, d'abord l'hôte puis l'interface.
Vous pouvez ensuite parcourir ce tableau groupé pour afficher/envoyer la sortie :
Essayez-le en ligne !
NIC --> "Carte d'interface réseau"