Saya mempunyai senarai hos dengan antara muka. Kod mesti mengira antara muka pendua untuk setiap hos. Akhir sekali, kod juga mesti memaparkan antara muka pendua X kali untuk setiap hos.
Saya bertanya soalan ini kerana saya ingin menghantar makluman bahawa hos X telah gagal dengan satu atau lebih antara muka yang gagal.
$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") );
Saya telah mengikuti contoh lain di sini, tetapi kebanyakannya adalah tatasusunan mudah, atau jika ia contoh berbilang dimensi, contohnya tidak serupa.
Saya sudah mencubanya...
<?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>"); } }
Kod di atas adalah salah, ia agak berfungsi tetapi ia tidak seperti yang saya jangkakan... Adakah terdapat cara mudah untuk melakukan ini?
Keluaran akhir sepatutnya kelihatan seperti ini:
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.
Ini mungkin yang anda cari:
Keluarannya ialah:
Anda perlu mengumpulkan dua kumpulan, pertama hos dan kemudian antara muka.
Anda kemudian boleh mengulangi tatasusunan berkumpulan ini untuk memaparkan/menghantar output:
Cuba dalam talian!
NIC --> "Kad Antara Muka Rangkaian"