0

php Есть два массива один c номером порта, маком сетевого устройства

Array
(
[0] = > Array
     (
         [mac_id] => 00:07:e9:32:e5:58
         [port_number] => 15
         [date_updated] => Array
                           (
                           [$date] => 1644511780778
                           )
      )

И второй с мак адресами и производителем вида

Array
(
[0] = > Array
     (
         [mac] => 00:00:0C
         [manufacter] => Cisco Systems
      )
[1] = > Array
     (
         [mac] => 00:00:0D
         [manufacter] => Fibronics
      )

Подскажите как сделать поиск по имеющимся мак адресам первого [mac_id] массива во втором[mac], и в случае совпадения отображать производителя [manufacter]?

Dmitry
  • 7,859
hello_v
  • 27

1 Answers1

0
<?php
$devicesList = [ ['mac_id' => '00:07:e9:32:e5:58', 'port_number' => 15, 'date_updated' => [] ] ];
$manufacturersList = [ ['mac' => '00:00:0C', 'manufacter' => 'Cisco Systems'], 
                       ['mac' => '00:00:0D', 'manufacter' => 'Fibronics '], 
                       ['mac' => '00:07:E9', 'manufacter' => 'Intel Corp']
                     ]; 

foreach( $devicesList as $device ) {
    $deviceMacAddr = $device['mac_id'];
    $manufacturerName = "unknown";
    echo "device:\n";
    echo "==========\n";
    echo "mac addr:".$deviceMacAddr."\n";
    echo "manufacturer: ";
    foreach( $manufacturersList as $manufacturer ) {
        $manufacturerMacAddr = mb_convert_case( $manufacturer['mac'], MB_CASE_LOWER);
        if ( mb_substr( $deviceMacAddr, 0, mb_strlen( $manufacturerMacAddr ) ) == $manufacturerMacAddr ) {
            $manufacturerName = $manufacturer['manufacter'];
            break;
        }
    }
    echo $manufacturerName."\n\n";
}

Результат

device:
==========
mac addr:00:07:e9:32:e5:58
manufacturer: Intel Corp

P.S Но проще через CURL сразу лезть например на https://macaddress.io/ и парсить ответ оттуда - и не нужно хранить у себя всю эту базу вендоров оборудования