Skip navigation.

极湖

无不用其“极”

Posts tagged with "function"

用于分割字符串的两个 PHP 函数

,

新作了两个函数,结果没用上,放在在这儿以备用。
/**
 * 按词分割字符串
 * @param $str 元字符串
 * @param $maxLength 单词最大长度
 * @return array
 */
function splitInWords($str, $maxLength = 16) {
    if(empty($str)) return array();
    if($maxLength <= 0) $maxLength = 1;
    $rawWords = explode(' ', $str);
    $words = array();
    foreach($rawWords as $word) {
        $len = mb_strlen($word);
        if($len > $maxLength) {
            $pos = 0;
            while($len > $maxLength) {
                $words[] = mb_substr($word, $pos, $maxLength);
                $pos += $maxLength;
                $len -= $maxLength;
            }
            $words[] = mb_substr($word, $pos, $maxLength);
        } else {
            $words[] = $word;
        }
    }
    return $words;
}

/**
 * 按行(指定长度)分割字符串
 * @param $str 元字符串
 * @param $length 每行最大字符数
 * @return array
 */
function splitInLines($str, $length = 80) {
    $lines = array();
    foreach(split("\n", $str) as $s) {
        preg_match_all("/./u", $s, $matches);
        $arr = $matches[0];
        for($i = 0; $i < ceil(count($arr)/$length); $i++) {
            $lines[] = join("", array_slice($arr, $i*$length, $length));
        }
    }
    return $lines;
}

ExtJS: 深度查找树节点

, ,

方法一: 自己做递归函数
function findChildRecursively(rootNode, key, value) {
    var nodes = rootNode.childNodes;
    for(var i = 0; i < nodes.length; i++) {
        if(nodes[i].attributes[key] == value){
            return nodes[i];
        } else {
            if(!nodes[i].isLeaf()) {
                // 查找结果不包含 Folder 的情况下
                continue;
            }
            if(!nodes[i].isLoaded()) {
                //加载子节点,AsyncTreeNode 需要,TreeNode 则不需
                nodes[i].reload();
            }
            if(node = findChildRecursively(nodes[i], key, value)) {
                return node;
            }
        }
    }
    return null;
} 

方法二: 利用现成方法 cascade
var node = null;
rootNode.cascade(function(n) {
    if(n.isLeaf() && !n.isLoaded()) {
        n.reload();
        return true;
    }
    if(n.attributes[key] == value) {
        node = n;
        return false;
    }
    return true;
});

JavaScript: 取得字符串的字节数

, ,

代码:
//四舍五入
function _round(num, X) {
    X = X || 2;
    return Math.round(num*Math.pow(10, X))/Math.pow(10, X);
}

//取得字符串的字节数
function _byteLength(str){
    //方法一:正则
    if(!str) return 0;
    return str.replace(/[^\x00-\xFF]/g,'**').length;
    //方法二:循环
    /*
    var byteLen=0,len=str.length;
    for(var i=0; i<len; i++){
        if(str.charCodeAt(i)>255){
            byteLen += 2;
        } else {
            byteLen++;
        }
    }
    return byteLen;
    */
}

//测试
var str = "試験helloテストテスト";
var size = _byteLength(str);
alert(size + ' bytes');
alert(_round(size/1024) + ' Kb');

PHP: 避免上传文件名重复的一种解决方法

, ,

/**
 * 上传文件名的取得(若有重复,自动加 1, 2, 3 ...)
 * @param     $upload_name     上传文件名
 * @param     $dest_path      目标路径
 * @return    新文件名
**/
function FILE_get_upload_filename($upload_name, $dest_path)
{
    $fullpath = "$dest_path/$upload_name";
    if(!file_exists($fullpath)) {
        return $upload_name;
    }
    $ext = strrchr($upload_name, '.');
    $filename = $upload_name;
    if($ext !== false) { 
        $filename = substr($upload_name, 0, -strlen($ext)); 
    }
    $i = 0;
    while (1) {
        $i++;
        $newname = "$filename$i$ext";
        if(!file_exists("$dest_path/$newname")) {
            return $newname;
        }
    }
}

JavaScript: 阿拉伯数字转中文

, , , ...

用 JavaScript 新作一个小东西,需要把阿拉伯数字转换成中文的表达方式,因此做了一个实现该功能的函数。函数很简单,也不是很完善,不过也许有人用得上,就贴在这儿了:
//*******************************************************
// 阿拉伯数字转中文
//*******************************************************
function toCnNumber(intNum) {
    var strCnNum = '';
    var arrCnNum = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
    var arrCnMark = ["", "十", "百", "千", "万", "十万", "百万", "千万", "亿"];
    var strNum = intNum.toString();
    var intLen = strNum.length;
    var zeroFlag = false;
    for(var i = 0; i < intLen; i++) {
        var n = parseInt(strNum.charAt(i));
        if(parseInt(strNum.substr(i)) == 0) {
            break;
        } else {
            if(n == 0) {
                if(!zeroFlag) {
                    strCnNum += arrCnNum[n];
                }
                zeroFlag = true;
            } else {
                strCnNum += arrCnNum[n];
                strCnNum += arrCnMark[intLen - i - 1];
                zeroFlag = false;
            }
        }
    }
    return strCnNum;
}
December 2009
S M T W T F S
November 2009January 2010
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31