龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

根据mac范围批量添加mac

时间:2014-07-22 14:48来源: 作者: 点击:
分享到:
可以输入一个mac范围,批量添加mac比如输入11-22-33-44-[aa-ff]-55,1-2-3-34-4-4将批量生产mac
可以输入一个mac范围,批量添加mac比如输入11-22-33-44-[aa-ff]-55,1-2-3-34-4-4
将批量生产mac
<?php
/**
 * 根据区间id转换为实际的多个id数组
 * @author 于燚
 * 2014年2月10日15:29:09
 */
class BatchConvertDeviceId {

    public static function convert($str_str) {
        $str_str = str_replace(',', ',',$str_str);
        $arr_ids = explode(',', $str_str);
        $arr_re=array();
        foreach ($arr_ids as $str_str) {
            $arr_arr = preg_split("/\[([^\[\]]+)\]/", $str_str, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
            $int_count = count($arr_arr);
            $arr_data = array();
            if ($int_count == 1) {
                $arr_data = $arr_arr;
            } else {
                for ($i = 0; $i < $int_count; $i++) {
                    if ($i % 2 == 0) {
                        $arr_data = self::batchLink($arr_data, array($arr_arr[$i]));
                    } else {
                        self::batchConvert($arr_data, $arr_arr[$i]);
                    }
                }
            }
            $arr_re = array_merge($arr_re, $arr_data);
        }
        return $arr_re;
    }

    private static function batchConvert(&$arr, $str) {
        $arr_str = explode('-', $str);
        $int_start = base_convert($arr_str[0], 16, 10);
        $int_end = base_convert($arr_str[1], 16, 10);
        $int_min=$int_start<$int_end?$int_start:$int_end;
        $int_max=$int_start>$int_end?$int_start:$int_end;
        for ($int_min; $int_min <= $int_max; $int_min++) {
            $_arr_str[] = base_convert($int_min, 10, 16);
        }
        $arr = self::batchLink($arr, $_arr_str);
    }

    private static function batchLink($arr, $arr_str) {
        $arr_re = array();
        if (!empty($arr)) {
            foreach ($arr as $_v1) {
                foreach ($arr_str as $_v2) {
                    $arr_re[] = $_v1 . $_v2;
                }
            }
        } else {
            $arr_re = $arr_str;
        }
        return $arr_re;
    }

}

//$str = "ab-cd-33-22-aa-[11-13]-[ab-ac]";
//
//$arr = BatchConvertDeviceId::convert($str);
//echo '<pre>';
//print_r($arr);
精彩图集

赞助商链接