编辑代码

<?php 
    $arrData = array(
        // "0x00010009 : admin",
        // "0x00010010 : admin",
        // "0x00010007 : adminisp",
        // "0x00010008 : adminisp",
        // "0x00040013 : 1",
        // "0x00040014 : 36",
        // "0x00040008 : 0",
        // "0x00040004 : 2.4G-1;;2.4G-3;2.4G-4;5G-1;;5G-3;5G-4",
        // "0x00040006 : 12345678;;32345678;42345678;12345678;12345678;12345678;12345678",
        // "0x00040002 : 1;;1;1;1;1;1;1",
        // "0x00040003 : 1;;1;1;1;1;1;1",
        // "0x00040007 : 2;;2;2;2;2;2;2",
        // "0x00050000 : 1",
        // "0x00050001 : http://192.168.80.123:10301",
        // "0x00050002 : username",
        // "0x00050003 : password",
        // "0x00050007 : 1",
        // "0x00050008 : 600",
        // "0x00050005 : cpe",
        // "0x00050006 : cpe",
        // "0x00050012 : /tr069\r",
        // "0x00050013 : 7547",
        // "0x00050014 : 1",
        // "0x00050010 : ",
        // "0x00050011 : 3478",
        // "0x00050015 : stun",
        // "0x00050016 : stun",
        // "0x00060001 : 1",
        // "0x00060004 : 1",
        // "0x00060003 : 1",
        // "0x00060000 : 1",
        // "0x00060013 : 1",
        // "0x00060015 : 1",
        // "0x00060012 : 1",
        // "0x00060024 : 23",
        // "0x00060027 : 80",
        // "0x00060026 : 443",
        // "0x00030005 : 192.168.101.23",
        // "0x00080008 : 255.255.255.0",
        // "0x00080000 : 1",
        // "0x00080002 : 255.255.255.0",
        // "0x00080007 : 86400",
        // "0x00080004 : 8.8.8.8",
        // "0x00080005 : 192.168.101.1",
        // "0x00080001 : 192.168.101.24-192.168.101.254",
        '0x00030020 : {"WAN1":{"VLANMode":"tag","VLANID":100,"Priority":2,"ConnType":"ROUTE","WANCType":"IP","MTU":1500,"IgmpMldEnable":1,"MulticastVLANID":1001,"IPprotocol":1,"IsNAT":1,"DNS1":"1.1.1.1","DNS2":"8.8.8.8","PortBinding":4089},"WAN2":{"VLANMode":"tag","VLANID":200,"Priority":3,"ConnType":"ROUTE","WANCType":"PPPOE","MTU":1500,"IgmpMldEnable":1,"MulticastVLANID":1002,"IPprotocol":1,"IsNAT":1,"PPPoEUserName":"csb","PPPoEPassword":"csb","PPPoEACName":"","PPPoEServiceName":"","PortBinding":2166}}',
        ""
    );
    //print_r($arrData);
    $arrLen = count($arrData);

    // $string = "aaa;bbb;;;;ccc;";
    // $arr = explode(';', $string); // 首先使用分号进行基本的分割
    // print_r($arr);

    // $finalArr = [];
    // foreach ($arr as $key => $value) {
    //     $finalArr[] = $value;
    //     // 检查下一个元素是否存在且当前元素非空,如果不是最后一个且下一个也是空,则手动插入一个空字符串
    //     if ($key < count($arr) - 1 && $arr[$key + 1] === '') {
    //         $finalArr[] = '';
    //     }
    // }
    // print_r($finalArr);
    // echo "\n";

    $arrAccount = array();
    $arrLan = array();
    $arrAcl = array();
    $arrRemote = array();
    $arrWan = array();
    $arrWlan = array();
    $arrTotal = array();
    $arrFinal = array();

    for($i=0;$i<$arrLen;$i++) {
        $prefix = substr($arrData[$i], 0, 10);
        if(!empty($prefix)){
            $subfix = substr($arrData[$i], 13);
            // echo "prefix= ".$prefix.", subfix= ".$subfix."\n";
            switch($prefix){
                
                //account配置
                case "0x00010009":
                    $arrAccount['username'] = $subfix;
                    break;
                case "0x00010010":
                    $arrAccount['password'] = $subfix;
                    break;
                case "0x00010007":
                    $arrAccount['susername'] = $subfix;
                    break;
                case "0x00010008":
                    $arrAccount['spassword'] = $subfix;
                    break;
                //lan配置
                case "0x00030005":
                    $arrLan['lan_ip'] = $subfix;
                    break;
                case "0x00080008":
                    $arrLan['lan_mask'] = $subfix;
                    break;
                case "0x00080000":
                    $arrLan['dhcp_enable'] = intval($subfix);
                    break;
                case "0x00080002":
                    $arrLan['dhcp_mask'] = $subfix;
                    break;
                case "0x00080007":
                    $arrLan['max_lease_time'] = intval($subfix);
                    break;
                case "0x00080004":
                    $arrLan['dns_primary'] = $subfix;
                    break;
                case "0x00080005":
                    $arrLan['dns_secondary'] = $subfix;
                    break;
                case "0x00080001":
                    $arrPool = explode("-", $subfix);
                    //print_r($arrPool);
                    $arrLan['dhcp_range_start'] = $arrPool[0];
                    $arrLan['dhcp_range_end'] = $arrPool[1];
                    break;
                //tr069配置
                case "0x00050000":
                    $arrRemote['tr069enable'] = intval($subfix);
                    break;
                case "0x00050001":
                    $arrRemote['acsurl'] = $subfix;
                    break;
                case "0x00050002":
                    $arrRemote['acsname'] = $subfix;
                    break;
                case "0x00050003":
                    $arrRemote['acspasswd'] = $subfix;
                    break;
                case "0x00050007":
                    $arrRemote['informenable'] = intval($subfix);
                    break;
                case "0x00050008":
                    $arrRemote['informinterval'] = intval($subfix);
                    break;
                case "0x00050005":
                    $arrRemote['cwmpname'] = $subfix;
                    break;
                case "0x00050006":
                    $arrRemote['cwmppasswd'] = $subfix;
                    break;
                case "0x00050012":
                    $arrRemote['cwmppath'] = $subfix;
                    break;
                case "0x00050013":
                    $arrRemote['cwmpport'] = intval($subfix);
                    break;
                case "0x00050014":
                    $arrRemote['stunenable'] = intval($subfix);
                    break;
                case "0x00050010":
                    $arrRemote['stunaddr'] = $subfix;
                    break;
                case "0x00050011":
                    $arrRemote['stunport'] = intval($subfix);
                    break;
                case "0x00050015":
                    $arrRemote['stunname'] = $subfix;
                    break;
                case "0x00050016":
                    $arrRemote['stunpasswd'] = $subfix;
                    break;

                //acl配置
                case "0x00060001":
                    $arrAcl['wan_telnet'] = intval($subfix);
                    break;
                case "0x00060004":
                    $arrAcl['wan_http'] = intval($subfix);
                    break;
                case "0x00060003":
                    $arrAcl['wan_https'] = intval($subfix);
                    break;
                case "0x00060000":
                    $arrAcl['wan_ping'] = intval($subfix);
                    break;
                case "0x00060013":
                    $arrAcl['lan_telnet'] = intval($subfix);
                    break;
                case "0x00060016":
                    $arrAcl['lan_http'] = intval($subfix);
                    break;
                case "0x00060012":
                    $arrAcl['lan_ping'] = intval($subfix);
                    break;
                case "0x00060015":
                    $arrAcl['lan_https'] = intval($subfix);
                    break;
                case "0x00060024":
                    $arrAcl['port_telnet'] = intval($subfix);
                    break;
                case "0x00060027":
                    $arrAcl['port_http'] = intval($subfix);
                    break;
                case "0x00060026":
                    $arrAcl['port_https'] = intval($subfix);
                    break;
                //wlan配置
                case "0x00040013":
                    $arrWlan['channel_24g'] = intval($subfix);
                    break;
                case "0x00040014":
                    $arrWlan['channel_5g'] = intval($subfix);
                    break;
                case "0x00040008":
                    $arrWlan['wps_enable'] = intval($subfix);
                    break;
                case "0x00040004":
                    $arrSsid = explode(";", $subfix);
                    break;
                case "0x00040006":
                    $arrSsidPassword = explode(";", $subfix);
                    break;
                case "0x00040002":
                    $arrSsidEnable = explode(";", $subfix);
                    break;
                case "0x00040003":
                    $arrSsidBroadcast = explode(";", $subfix);
                    break;
                case "0x00040007":
                    $arrSsidEncryption = explode(";", $subfix);
                    break;
                //wan配置
                case "0x00030020":
                    $strUpWan = $subfix;
                    break;
                default:
            }
        }
    }
    if(!empty($arrSsid) || !empty($arrSsidPassword) || !empty($arrSsidEnable) || !empty($arrSsidBroadcast) || !empty($arrSsidEncryption)) {
        $arr24G = array();
        $arr5G = array();
        print_r($arrSsid);
        print_r($arrSsidEnable);
        for($j=0;$j<8;$j++){
            $arrtmp = array();
            if(!empty($arrSsid) && $arrSsid[$j] != '')
                $arrtmp['ssid'] = $arrSsid[$j];
            if(!empty($arrSsidPassword) && $arrSsidPassword[$j] != '')
                $arrtmp['ssid_password'] = $arrSsidPassword[$j];
            if(!empty($arrSsidEnable) && $arrSsidEnable[$j] != '')
                $arrtmp['ssid_enable'] = $arrSsidEnable[$j];
            if(!empty($arrSsidBroadcast) && $arrSsidBroadcast[$j] != '')
                $arrtmp['ssid_broadcast'] = $arrSsidBroadcast[$j];
            if(!empty($arrSsidEncryption) && $arrSsidEncryption[$j] != '')
                $arrtmp['encryption'] = $arrSsidEncryption[$j];
            // print_r($arrtmp);
            if($j>=0 && $j<4){
                array_push($arr24G, $arrtmp);
            } else if($j>=4 && $j<8) {
                array_push($arr5G, $arrtmp);
            }
        }
        $arrWlan['2_4G'] = $arr24G;
        $arrWlan['5G'] = $arr5G;
    }

    if(!empty($strUpWan)) {
        // echo "\n----------------分割--------------------\n";
        // var_dump(json_decode($strUpWan));
        echo "----------------分割--------------------\n";
        print_r(json_decode($strUpWan, true));
        $decodeWan = json_decode($strUpWan, true);
        $wanNum = count($decodeWan);
        echo "wanNum= ".$wanNum."\n";
        foreach($decodeWan as $key1 => $value1) {
            echo "key1= ".$key1.", value1= ".$value1."\n";
            $arrTmpWan = [];
            $arrDns = [];
            $arrPpp = [];
            foreach($value1 as $key2 => $value2) {
                echo "\tkey2= ".$key2.", value2= ".$value2."\n";
                switch($key2) {
                    case "VLANMode":
                        if($value2 === "tag") {
                            $arrTmpWan['enable_vlan'] = 1;
                        } else if($value2 === "untag") {
                            $arrTmpWan['enable_vlan'] = 0;
                        }
                        break;
                    case "VLANID":
                        $arrTmpWan['vlanId'] = intval($value2);
                        break;
                    case "ConnType":
                        $connType = $value2;
                        break;
                    case "WANCType":
                        $wancType = $value2;
                        break;
                    case "Priority":
                        $arrTmpWan['priority'] = intval($value2);
                        break;
                    case "MTU":
                        $arrTmpWan['mtu'] = intval($value2);
                        break;
                    case "IgmpMldEnable":
                        $arrTmpWan['enable_igmp_mld_proxy'] = intval($value2);
                        break;
                    case "MulticastVLANID":
                        $arrTmpWan['multicast_vlan_id'] = intval($value2);
                        break;
                    case "IPprotocol":
                        $arrTmpWan['ip_protocol'] = intval($value2);
                        break;
                    case "IsNAT":
                        $arrTmpWan['enable_napt'] = intval($value2);
                        break;
                    case "ServList":
                        $arrTmpWan['connection_type'] = intval($value2);
                        break;
                    case "DNS1":
                        $arrDns['primaryDNS'] = $value2;
                        break;
                    case "DNS2":
                        $arrDns['slaveDNS'] = $value2;
                        break;
                    case "PPPoEUserName":
                        $arrPpp['username'] = $value2;
                        break;
                    case "PPPoEPassword":
                        $arrPpp['password'] = $value2;
                        break;
                    case "PPPoEACName":
                        $arrPpp['ac_name'] = $value2;
                        break;
                    case "PPPoEServiceName":
                        $arrPpp['service_name'] = $value2;
                        break;
                    case "PortBinding":
                        for($k=0;$k<12;$k++){
                            if(($value2 >> $k) & 1) {
                                $arrPortBingding[] = $k;
                            }
                        }
                        $arrTmpWan['port_binding'] = $arrPortBingding;
                    default:
                }
            }
            if(!empty($connType)) {
                if($connType == "BRIDGE") {
                    $arrTmpWan['service_type'] = 0;
                } else if($connType == "ROUTE" && !empty($wancType)) {
                    if($wancType == "IP") {
                        $arrTmpWan['service_type'] = 1;
                    } else if($wancType == "PPPOE") {
                        $arrTmpWan['service_type'] = 2;
                    }
                }
            }
            if(!empty($arrPpp)) {
                $arrTmpWan['ppp'] = $arrPpp;
            }
            if(!empty($arrDns)) {
                $arrDns['request_dns'] = 0;
                $arrTmpWan['ipv4'] = $arrDns;
            }
            array_push($arrWan, $arrTmpWan);

        }

        echo "----------------分割--------------------\n";
    }

    if(!empty($arrAccount)){
        $arrTotal['account'] = $arrAccount;
    }
    if(!empty($arrLan)){
        $arrTotal['lan'] = $arrLan;
    }
    if(!empty($arrAcl)){
        $arrTotal['acl'] = $arrAcl;
    }
    if(!empty($arrWlan)){
        $arrTotal['wlan'] = $arrWlan;
    }
    if(!empty($arrWan)){
        print_r($arrWan);
        $arrTotal['wan'] = $arrWan;
    }
    if(!empty($arrRemote)){
        $arrTotal['remote'] = $arrRemote;
    }

    $arrFinal['code'] = 0;
    $arrFinal['data'] = $arrTotal;
    print_r($arrFinal);

    echo json_encode($arrFinal,JSON_UNESCAPED_UNICODE)."\n"; //JSON_UNESCAPED_UNICODE不编码中文