编辑代码

<?php 

//$jsonData = '{"wlan":{"2_4G":[{"ssid":"2.4G-1","ssid_password":"12345678","ssid_enable":1,"ssid_broadcast":1,"encryption":2},{"ssid":"2.4G-2","ssid_password":"12345678","ssid_enable":1,"ssid_broadcast":1,"encryption":2},{"ssid":"2.4G-3","ssid_password":"12345678","ssid_enable":1,"ssid_broadcast":1,"encryption":2},{"ssid":"2.4G-4","ssid_password":"12345678","ssid_enable":1,"ssid_broadcast":1,"encryption":2}]},"wan":[{"enable_vlan":1,"vlanId":100,"priority":2,"service_type":1,"connection_type":2,"mtu":1500,"enable_igmp_mld_proxy":1,"multicast_vlan_id":1001,"ip_protocol":1,"enable_napt":1,"ipv4":{"dhcp_enable":1,"request_dns":1,"dns":["1.1.1.1","8.8.8.8"]}},{"enable_vlan":1,"vlanId":200,"priority":3,"service_type":2,"connection_type":2,"mtu":1500,"enable_igmp_mld_proxy":1,"multicast_vlan_id":1002,"ip_protocol":1,"enable_napt":1,"ppp":{"username":"csb","password":"csb","ac_name":"","service_name":""}}]}';

$jsonData = '{
    "wlan": {
        "2_4G": [
            {
                "ssid": "2.4G-1",
                "ssid_password": "12345678",
                "ssid_enable": 1,
                "ssid_broadcast": 1,
                "encryption": 2
            },
            {
                "ssid": "2.4G-2",
                "ssid_password": "12345678",
                "ssid_enable": 1,
                "ssid_broadcast": 1,
                "encryption": 2
            },
            {
                "ssid": "2.4G-3",
                "ssid_password": "12345678",
                "ssid_enable": 1,
                "ssid_broadcast": 1,
                "encryption": 2
            },
            {
                "ssid": "2.4G-4",
                "ssid_password": "12345678",
                "ssid_enable": 1,
                "ssid_broadcast": 1,
                "encryption": 2
            }
        ]
    },
    "wan": [
        {
            "enable_vlan": 1,
            "vlanId": 100,
            "priority": 2,
            "service_type": 1,
            "connection_type": 2,
            "mtu": 1500,
            "enable_igmp_mld_proxy": 1,
            "multicast_vlan_id": 1001,
            "ip_protocol": 1,
            "enable_napt": 1,
            "ipv4": {
                "dhcp_enable": 1,
                "request_dns": 1,
                "dns": [
                    "1.1.1.1",
                    "8.8.8.8"
                ]
            }
        },
        {
            "enable_vlan": 1,
            "vlanId": 200,
            "priority": 3,
            "service_type": 2,
            "connection_type": 2,
            "mtu": 1500,
            "enable_igmp_mld_proxy": 1,
            "multicast_vlan_id": 1002,
            "ip_protocol": 1,
            "enable_napt": 1,
            "ppp": {
                "username": "csb",
                "password": "csb",
                "ac_name": "",
                "service_name": ""
            }
        }
    ]
}';

// $decode_data = json_encode($jsonData, true);
// print_r($decode_data);
// echo $decode_data."\n";

$obj = json_decode($jsonData, true);
// print_r($obj) ;

// if (json_last_error() === JSON_ERROR_NONE) {
//     $ssidNames = array_map(function($item) {
//         return $item['ssid'];
//     }, $arrayData['wlan']['2_4G']);
    
//     $combinedSsids = implode(';', $ssidNames);
//     echo "Combined SSID names: " . $combinedSsids;
// } else {
//     echo "Error parsing JSON: " . json_last_error_msg();
// }

    $wanConnType = "";
    $wanServType = "";

    if(json_last_error() === JSON_ERROR_NONE) {
        foreach($obj as $key1 => $value1) {
            echo "foreach1: key1= ".$key1."\n";
            if($key1 === "wlan1"){
                $arrSsidName = [];
                $arrSsidPwd = [];
                $arrSsidEnable = [];
                $arrSsidBroadcast = [];
                $arrSsidEncryption = [];
                foreach($value1 as $key2 => $value2) {
                    echo "\tforeach2: key2= ".$key2."\n";
                    if($key2 === '2_4G') {
                        for($i=0;$i<4;$i++){
                            foreach($value2[$i] as $key3 => $value3) {
                                echo "\t\tkey3= ".$key3.", value3= ".$value3."\n";
                                switch($key3)
                                {
                                    case "ssid":
                                        array_push($arrSsidName,$value3);
                                        break;
                                    case "ssid_password":
                                        array_push($arrSsidPwd,$value3);
                                        break;
                                    case "ssid_enable":
                                        array_push($arrSsidEnable,$value3);
                                        break;
                                    case "ssid_broadcast":
                                        array_push($arrSsidBroadcast,$value3);
                                        break;
                                    case "encryption":
                                        array_push($arrSsidEncryption,$value3);
                                        break;
                                    default:
                                }
                            }
                        }
                    }

                    $ssidname = implode(";", $arrSsidName);
                    echo "ssid= ".$ssidname."\n";
                    $ssidpwd = implode(";", $arrSsidPwd);
                    echo "ssid= ".$ssidpwd."\n";
                    $ssidenable = implode(";", $arrSsidEnable);
                    echo "ssid= ".$ssidenable."\n";
                    $ssidbroadcast = implode(";", $arrSsidBroadcast);
                    echo "ssid= ".$ssidbroadcast."\n";
                    $ssidencryt = implode(";", $arrSsidEncryption);
                    echo "ssid= ".$ssidencryt."\n";
                    echo isset($arrSsidEncryption)."\n";
                    echo empty($arrSsidEncryption)."\n";
                    var_dump(empty($ssidencryt));

                }
            } else if($key1 === "wan1") {
                $arrLength = count($value1);
                //var_dump($arrLength);
                $arrTotalWan=[];
                //print_r($value1);
                for($i=0;$i<$arrLength;$i++) {
                    $arrWan = [];

                    foreach($value1[$i] as $key2 => $value2) {
                        echo "foreach2: key2= ".$key2.", value2= ".$value2."\n";
                        //print_r($value2."\n");
                        switch($key2)
                        {
                            case "service_type":
                                if($value2 === 0) {
                                    $tempStr = '"ConnType":"BRIDGE"';
                                    array_push($arrWan, $tempStr);
                                } else if($value2 === 1) {
                                    $tempStr = '"ConnType":"ROUTE"';
                                    array_push($arrWan, $tempStr);
                                    $tempStr = '"WANCType":"IP"';
                                    array_push($arrWan, $tempStr);
                                } else if($value2 === 2) {
                                    $tempStr = '"ConnType":"ROUTE"';
                                    array_push($arrWan, $tempStr);
                                    $tempStr = '"WANCType":"PPPOE"';
                                    array_push($arrWan, $tempStr);
                                }
                                break;
                            case "enable_vlan":
                                if($value2 === 1) {
                                    $tempStr = '"VLANMode":"tag"';
                                } else {
                                    $tempStr = '"VLANMode":"untag"';
                                }
                                array_push($arrWan, $tempStr);
                                break;
                            case "vlanId":
                                $tempStr = '"VLANID":'.$value2;
                                array_push($arrWan, $tempStr);
                                break;
                            case "priority":
                                $tempStr = '"Priority":'.$value2;
                                array_push($arrWan, $tempStr);
                                break;
                            case "mtu":
                                $tempStr = '"MTU":'.$value2;
                                array_push($arrWan, $tempStr);
                                break;
                            case "enable_igmp_mld_proxy":
                                $tempStr = '"IgmpMldEnable":'.$value2;
                                array_push($arrWan, $tempStr);
                                break;
                            case "multicast_vlan_id":
                                $tempStr = '"MulticastVLANID":'.$value2;
                                array_push($arrWan, $tempStr);
                                break;
                            case "ip_protocol":
                                $tempStr = '"IPprotocol":'.$value2;
                                array_push($arrWan, $tempStr);
                                break;
                            case "enable_napt":
                                $tempStr = '"IsNAT":'.$value2;
                                array_push($arrWan, $tempStr);
                                break;
                            case "ppp":
                                foreach($value2 as $key3 => $value3) {
                                    echo "foreach3: key3= ".$key3.", value3= ".$value3."\n";
                                    switch($key3)
                                    {
                                        case "username":
                                            $tempStr = '"PPPoEUserName":"'.$value3.'"';
                                            array_push($arrWan, $tempStr);
                                            break;
                                        case "password":
                                            $tempStr = '"PPPoEPassword":"'.$value3.'"';
                                            array_push($arrWan, $tempStr);
                                            break;
                                        case "ac_name":
                                            $tempStr = '"PPPoEACName":"'.$value3.'"';
                                            array_push($arrWan, $tempStr);
                                            break;
                                        case "service_name":
                                            $tempStr = '"PPPoEServiceName":"'.$value3.'"';
                                            array_push($arrWan, $tempStr);
                                            break;
                                        default:
                                    }
                                }
                                break;
                            case "ipv4":
                                foreach($value2 as $key3 =>$value3) {
                                    switch($key3)
                                    {
                                        case "dns":
                                            if($value3[0]) {
                                                $tempStr = '"DNS1":"'.$value3[0].'"';
                                                array_push($arrWan, $tempStr);
                                            }
                                            if($value3[1]) {
                                                $tempStr = '"DNS1":"'.$value3[1].'"';
                                                array_push($arrWan, $tempStr);
                                            }
                                            break;
                                        default:
                                    }
                                }
                            default:
                        }
                    }
                    if(!empty($arrWan)) {
                        print_r($arrWan);
                        //echo "\n";
                        $strWan='"WAN'.($i+1).'":{'.implode(",", $arrWan).'}';
                        echo "strWan= ".$strWan."\n";
                        array_push($arrTotalWan, $strWan);
                    }
                }
                print_r($arrTotalWan);
                $strTotolWan="{".implode(",", $arrTotalWan)."}";
                echo "strTotolWan= ".$strTotolWan."\n";
            }
        }
        var_dump(date('Y-m-d_H-i-s'));
    }


    //构建数据
    $data = array(
        'description'=>'success',
        'code'=>0,
        'account'=>array(
            'username'=>'admin',
            'password'=>'root'
        ),
        'wan'=>array(
            array(
                'enable_vlan'=>1,
                'vlanid'=>100
            ),
            array(
                'enable_vlan'=>1,
                'vlanid'=>200
            )
        )
    );
    $arrtest1 = array(
        "lanip"=>"1.1.1.1",
        "mask"=>"2.2.2.2"
    );
    $arrtest2 = array(
        "lanip"=>"1.1.1.2",
        "mask"=>"2.2.2.4"
    );    
    $data["lan"] = array($arrtest1, $arrtest2);
    array_push($data["lan"], $arrtest2);
    //print_r($data);
    //转为JSON
    echo json_encode($data,JSON_UNESCAPED_UNICODE);

    $arrData = array(
        "0x00010009 : admin",
        "0x00010010 : admin",
        "0x00010007 : adminisp",
        "0x00010008 : adminisp",
        "0x00040013 : 1",
        "0x00040014 : 36",
        "0x00040008 : 0",
        "0x00040004 : 2.4G-1;2.4G-2;2.4G-3;2.4G-4;5G-1;5G-2;5G-3;5G-4",
        "0x00040006 : 12345678;12345678;12345678;12345678;12345678;12345678;12345678;12345678",
        "0x00040002 : 1;1;1;1;1;1;1;1",
        "0x00040003 : 1;1;1;1;1;1;1;1",
        "0x00040007 : 2;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",
        "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"},"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":""}}',
        ""
    );
    //print_r($arrData);
    $arrLen = count($arrData);


    $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();
        $arrtmp = array();
        for($j=0;$j<8;$j++){
            if(!empty($arrSsid))
                $arrtmp['ssid'] = $arrSsid[$j];
            if(!empty($arrSsidPassword))
                $arrtmp['ssid_password'] = $arrSsidPassword[$j];
            if(!empty($arrSsidEnable))
                $arrtmp['ssid_enable'] = intval($arrSsidEnable[$j]);
            if(!empty($arrSsidBroadcast))
                $arrtmp['ssid_broadcast'] = intval($arrSsidBroadcast[$j]);
            if(!empty($arrSsidEncryption))
                $arrtmp['encryption'] = intval($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":
                        $arrTmpWan['enable_vlan'] = intval($vlaue2);
                        break;
                    case "VLANID":
                        $arrTmpWan['vlanId'] = intval($vlaue2);
                        break;
                    case "Priority":
                        $arrTmpWan['priority'] = intval($vlaue2);
                        break;
                    case "MTU":
                        $arrTmpWan['mtu'] = intval($vlaue2);
                        break;
                    case "IgmpMldEnable":
                        $arrTmpWan['enable_igmp_mld_proxy'] = intval($vlaue2);
                        break;
                    case "MulticastVLANID":
                        $arrTmpWan['multicast_vlan_id'] = intval($vlaue2);
                        break;
                    case "IPprotocol":
                        $arrTmpWan['ip_protocol'] = intval($vlaue2);
                        break;
                    case "IsNAT":
                        $arrTmpWan['enable_napt'] = intval($vlaue2);
                        break;
                    case "ServList":
                        $arrTmpWan['connection_type'] = intval($vlaue2);
                        break;
                    case "DNS1":
                        $arrDns['primaryDNS'] = $vlaue2;
                        break;
                    case "DNS2":
                        $arrDns['slaveDNS'] = $vlaue2;
                        break;
                    case "PPPoEUserName":
                        $arrPpp['username'] = $vlaue2;
                        break;
                    case "PPPoEPassword":
                        $arrPpp['password'] = $vlaue2;
                        break;
                    case "PPPoEACName":
                        $arrPpp['ac_name'] = $vlaue2;
                        break;
                    case "PPPoEServiceName":
                        $arrPpp['service_name'] = $vlaue2;
                        break;
                    default:
                }
            }
            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不编码中文

    // $arrTest = array();
    // var_dump(isset($arrTest));
    // var_dump(empty($arrTest));
    // $arrTest['test1'] = "hello";
    // var_dump(isset($arrTest));
    // var_dump(empty($arrTest));
?>