5
  1. 统计数组元素个数

$arr = array(
      '1011,1003,1008,1001,1000,1004,1012',
      '1009',
      '1011,1003,1111'
    );
$result = array();
foreach ($arr as $str) {
  $str_arr = explode(',', $str);
  foreach ($str_arr as $v) {
    // $result[$v] = isset($result[$v]) ? $result[$v] : 0;
    // $result[$v] = $result[$v] + 1;
    $result[$v] = isset($result[$v]) ? $result[$v]+1 : 1;
  }
}

print_r($result);
//Array
(

[1011] => 2
[1003] => 2
[1008] => 1
[1001] => 1
[1000] => 1
[1004] => 1
[1012] => 1
[1009] => 1
[1111] => 1

)

  1. 循环删除目录

function cleanup_directory($dir) {
  foreach (new DirectoryIterator($dir) as $file) {
    if ($file->isDir()) {
      if (! $file->isDot()) {
        cleanup_directory($file->getPathname());
      }
    } else {
       unlink($file->getPathname());
    }
  }
   rmdir($dir);
}

3.无限极分类生成树


function generateTree($items){

    $tree = array();

    foreach($items as $item){

        if(isset($items[$item['pid']])){

            $items[$item['pid']]['son'][] = &$items[$item['id']];

        }else{

            $tree[] = &$items[$item['id']];

        }

    }

    return $tree;

}
function generateTree2($items){

    foreach($items as $item)

        $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];

    return isset($items[0]['son']) ? $items[0]['son'] : array();

}


$items = array(

    1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),

    2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),

    3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),

    4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'),

    5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'),

);

print_r(generateTree($items));
/**

 * 如何取数据格式化的树形数据

 */

$tree = generateTree($items);

function getTreeData($tree){

    foreach($tree as $t){

        echo $t['name'].'<br>';

        if(isset($t['son'])){

            getTreeData($t['son']);

        }

    }

}

4.数组排序 a - b 是数字数组写法 遇到字符串的时候就要

var test = ['ab', 'ac', 'bd', 'bc'];
test.sort(function(a, b) {
    if(a < b) {
        return -1;
    }

    if(a > b) {
        return 1;
    }

    return 0;
});

5.array_reduce

$raw = [1,2,3,4,5,];
// array_reduce 的第三个参数是 $result 的初始值
array_reduce($raw, function($result, $value) {
    $result[$value] = $value;

    return $result;
}, []);
// [1 => 1, 2 => 2, ... 5 => 5]

6.arraymap 闭包中只接受一个或者多个参数,闭包的参数数量和 arraymap 本身的参数数量必须一致

$input = ['key' => 'value'];
array_map(function($key, $value) {

    echo $key . $value;
}, array_keys($input), $input)
// 'keyvalue'
$double = function($item) {
  return 2 * $item;
}

$result = array_map($double, [1,2,3]);

// 2 4 6

7.繁殖兔子

$month = 12;
   $fab = array();
 
   $fab[0] = 1;
   $fab[1] = 1;
 
     for ($i = 2; $i < $month; $i++)
     {
         $fab[$i] = $fab[$i - 1] + $fab[$i - 2];
     }
 
     for ($i = 0; $i < $month; $i++)
     {
         echo sprintf("第{%d}个月兔子为:{%d}",$i, $fab[$i])."<br/>";
     }

8 .datetime

function getCurMonthFirstDay($date)
{
    return date('Y-m-01', strtotime($date));
}
 getCurMonthLastDay('2015-07-23')
function getCurMonthLastDay($date)
{
    return date('Y-m-d', strtotime(date('Y-m-01', strtotime($date)) . ' +1 month -1 day'));
}

9.加密解密

function encrypt($data, $key)

{

    $key    =   md5($key);

    $x      =   0;

    $len    =   strlen($data);

    $l      =   strlen($key);

    $char   =   '';

    for ($i = 0; $i < $len; $i++)

    {

        if ($x == $l)

        {

            $x = 0;

        }

        $char .= $key{$x};

        $x++;

    }

    $str    =   '';

    for ($i = 0; $i < $len; $i++)

    {

        $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);

    }

    return base64_encode($str);

}

 

function decrypt($data, $key)

{

    $key = md5($key);

    $x = 0;

    $data = base64_decode($data);

    $len = strlen($data);

    $l = strlen($key);

    $char = '';

    for ($i = 0; $i < $len; $i++)

    {

        if ($x == $l)

        {

            $x = 0;

        }

        $char .= substr($key, $x, 1);

        $x++;

    }

    $str = '';

    for ($i = 0; $i < $len; $i++)

    {

        if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1)))

        {

            $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));

        }

        else

        {

            $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));

        }

    }

    return $str;

}

10 . 多维数组降级

function array_flatten($arr) {
    $result = [];

    array_walk_recursive($arr, function($value) use (&$result) {
        $result[] = $value;
    });

    return $result;
}
print_r(array_flatten([1,[2,3],[4,5]]));// [1,[2,3],[4,5]] => [1,2,3,4,5]
//  var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
var test = [1,2,3,[4,5,6],[7,8]];
[].concat.apply([], test); // [1,2,3,4,5,6,7,8] 对于 test 数组中的每一个 value, 将它 concat 到空数组 [] 中去,而因为 concat 是 Array 的 prototype,所以我们用一个空 array 作载体
var test1 = [1,2,[3,[4,[5]]]];

function flatten(arr) {
   return arr.reduce(function(pre, cur) {
        if(Array.isArray(cur)) {
            return flatten(pre.concat(cur));
        }

        return pre.concat(cur);
   }, []);
}

// [1,2,3,4,5]

11.json_encode中文


function json_encode_wrapper ($result)
{
    if(defined('JSON_UNESCAPED_UNICODE')){
        return json_encode($result,JSON_UNESCAPED_UNICODE|JSON_NUMERIC_CHECK);
    }else {
        return preg_replace(
            array("#\\\u([0-9a-f][0-9a-f][0-9a-f][0-9a-f])#ie", "/\"(\d+)\"/",),
            array("iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", "\\1"),
            json_encode($result)
        );
    }
}

12.二维数组去重

$arr = array(

    array('id'=>'2','title'=>'...','ding'=>'1','jing'=>'1','time'=>'...','url'=>'...','dj'=>'...'),

    array('id'=>'2','title'=>'...','ding'=>'1','jing'=>'1','time'=>'...','url'=>'...','dj'=>'...')

);
function about_unique($arr=array()){  
   /*将该种二维数组看成一维数组,则      该一维数组的value值有相同的则干掉只留一个,并将该一维      数组用重排后的索引数组返回,而返回的一维数组中的每个元素都是      原始key值形成的关联数组    */    
$keys =array();
   $temp = array();
   foreach($arr[0] as $k=>$arrays) {
    /*数组记录下关联数组的key值*/     
    $keys[] = $k;
   }
   //return $keys;    /*降维*/    
foreach($arr as $k=>$v) {
    $v = join(",",$v);  //降维     
    $temp[] = $v;
   }
   $temp = array_unique($temp); //去掉重复的内容    
foreach ($temp as $k => $v){
    /*再将拆开的数组按索引数组重新组装*/     
    $temp[$k] = explode(",",$v);  
   } 
   //return $temp;    /*再将拆开的数组按关联数组key值重新组装*/    
foreach($temp as $k=>$v) {
    foreach($v as $kkk=>$ck) {
     $data[$k][$keys[$kkk]] = $temp[$k][$kkk];
    }
   }
   return $data;
  }

13.格式化字节大小

/**
* 格式化字节大小
* @param  number $size      字节数
* @param  string $delimiter 数字和单位分隔符
* @return string            格式化后的带单位的大小
* @author 
*/
function format_bytes($size, $delimiter = '') {
  $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
  for ($i = 0; $size >= 1024 && $i < 6; $i++) $size /= 1024;
  return round($size, 2) . $delimiter . $units[$i];
}

14.3分钟前

/**
* 将指定时间戳转换为截止当前的xx时间前的格式  例如 return '3分钟前''
* @param string|int $timestamp unix时间戳
* @return string
*/
function time_ago($timestamp) {
    $etime = time() - $timestamp;
    if ($etime < 1) return '刚刚';     
    $interval = array (         
      12 * 30 * 24 * 60 * 60  =>  '年前 ('.date('Y-m-d', $timestamp).')',
      30 * 24 * 60 * 60       =>  '个月前 ('.date('m-d', $timestamp).')',
      7 * 24 * 60 * 60        =>  '周前 ('.date('m-d', $timestamp).')',
      24 * 60 * 60            =>  '天前',
      60 * 60                 =>  '小时前',
      60                      =>  '分钟前',
      1                       =>  '秒前'
    );
    foreach ($interval as $secs => $str) {
        $d = $etime / $secs;
        if ($d >= 1) {
            $r = round($d);
            return $r . $str;
        }
    };
}

15.身份证号

/**
* 判断参数字符串是否为天朝身份证号
* @param $id 需要被判断的字符串或数字
* @return mixed false 或 array[有内容的array boolean为真]
*/
function is_citizen_id($id) {
    //长度效验  18位身份证中的X为大写
    $id  = strtoupper($id);
    if(!(preg_match('/^\d{17}(\d|X)$/',$id) || preg_match('/^\d{15}$/',$id))) {
      return false;
    }
    //15位老号码转换为18位 并转换成字符串
    $Wi          = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1); 
    $Ai          = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); 
    $cardNoSum   = 0;
    if(strlen($id)==16) {
        $id        = substr(0, 6).'19'.substr(6, 9); 
        for($i = 0; $i < 17; $i++) {
          $cardNoSum += substr($id,$i,1) * $Wi[$i];
        }  
        $seq       = $cardNoSum % 11; 
        $id        = $id.$Ai[$seq];
    }
    //效验18位身份证最后一位字符的合法性
    $cardNoSum   = 0;
    $id17        = substr($id,0,17);
    $lastString  = substr($id,17,1);
    for($i = 0; $i < 17; $i++) {
        $cardNoSum += substr($id,$i,1) * $Wi[$i];
    }  
    $seq         = $cardNoSum % 11;
    $realString  = $Ai[$seq];
    if($lastString!=$realString) {return false;}
    //地域效验
    $oCity       =  array(11=>"北京",12=>"天津",13=>"河北",14=>"山西",15=>"内蒙古",21=>"辽宁",22=>"吉林",23=>"黑龙江",31=>"上海",32=>"江苏",33=>"浙江",34=>"安徽",35=>"福建",36=>"江西",37=>"山东",41=>"河南",42=>"湖北",43=>"湖南",44=>"广东",45=>"广西",46=>"海南",50=>"重庆",51=>"四川",52=>"贵州",53=>"云南",54=>"西藏",61=>"陕西",62=>"甘肃",63=>"青海",64=>"宁夏",65=>"新疆",71=>"台湾",81=>"香港",82=>"澳门",91=>"国外");
    $City        = substr($id, 0, 2);
    $BirthYear   = substr($id, 6, 4);
    $BirthMonth  = substr($id, 10, 2);
    $BirthDay    = substr($id, 12, 2);
    $Sex         = substr($id, 16,1) % 2 ;//男1 女0
    //$Sexcn       = $Sex?'男':'女';
    //地域验证
    if(is_null($oCity[$City])) {return false;}
    //出生日期效验
    if($BirthYear>2078 || $BirthYear<1900) {return false;}
    $RealDate    = strtotime($BirthYear.'-'.$BirthMonth.'-'.$BirthDay);
    if(date('Y',$RealDate)!=$BirthYear || date('m',$RealDate)!=$BirthMonth || date('d',$RealDate)!=$BirthDay) {
        return false;
    }
    return array('id'=>$id,'location'=>$oCity[$City],'Y'=>$BirthYear,'m'=>$BirthMonth,'d'=>$BirthDay,'sex'=>$Sex);
}

16.获取二维数组中某个key的集合

$user = array( 0 => array( 'id' => 1, 'name' => '张三', 'email' => 'zhangsan@sina.com', ), 1 => array( 'id' => 2, 'name' => '李四', 'email' => 'lisi@163.com', ), 2 => array( 'id' => 5, 'name' => '王五', 'email' => '10000@qq.com', ), ...... );
$ids = array(); $ids = array_map('array_shift', $user);
$ids = array_column($user, 'id');//php5.5
$names = array(); $names = array_reduce($user, create_function('$v,$w', '$v[$w["id"]]=$w["name"];return $v;'));

17.判断一个数是否为素数

function isPrime(number) {

   // If your browser doesn't support the method Number.isInteger of ECMAScript 6,
   // you can implement your own pretty easily
   if (typeof number !== 'number' || !Number.isInteger(number)) {
      // Alternatively you can throw an error.
      return false;
   }
 
   if (number < 2) {
      return false;
   }
    
   if (number === 2) {
      return true;
   } else if (number % 2 === 0) {
      return false;
   }
 
   var squareRoot = Math.sqrt(number);
   for(var i = 3; i <= squareRoot; i += 2) {
      if (number % i === 0) {
         return false;
      }
   }
 
   return true;
}
function isPrime($n) {//TurkHackTeam AVP production
    if ($n <= 3) {
        return $n > 1;
    } else if ($n % 2 === 0 || $n % 3 === 0) {
        return false;
    } else {
        for ($i = 5; $i * $i <= $n; $i += 6) {
            if ($n % $i === 0 || $n % ($i + 2) === 0) {
                return false;
            }
        }
        return true;
    }
}

18.闭包

var nodes = document.getElementsByTagName('button');
for (var i = 0; i < nodes.length; i++) {
   nodes[i].addEventListener('click', (function(i) {
      return function() {
         console.log('You clicked element #' + i);
      }
   })(i));
}
//将函数移动到循环外部即可(创建了一个新的闭包对象)
function handlerWrapper(i) {
   return function() {
      console.log('You clicked element #' + i);
   }
}
 
var nodes = document.getElementsByTagName('button');
for (var i = 0; i < nodes.length; i++) {
   nodes[i].addEventListener('click', handlerWrapper(i));
}

19.事件循环 Event Loop

function printing() {
   console.log(1); 
   setTimeout(function() { console.log(2); }, 1000); 
   setTimeout(function() { console.log(3); }, 0); 
   console.log(4);
}
 //即使setTimeout的延迟为0,其回调也会被加入到那些没有延迟的函数队列之后。
printing();//1432

20.字典排序

def mysort():
    dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0}
    dict= sorted(dic.iteritems(), key=lambda d:d[1], reverse = True)
    print dict//[('aa', 74), ('a', 31), ('bc', 5), ('asd', 4), ('c', 3), ('d', 0)]

21.数值缩写

var abbr = function (number) {
    var abbrList = ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'];
    var step = 1000;
    var i = 0;
    var j = abbrList.length;

    while (number >= step && ++i < j) {
        number = number / step;
    }

    if (i === j) {
        i = j - 1;
    }
    

    return number + abbrList[i];
};

22.数字千位分隔符

var format = function (number) {
    return String(number).replace(/(\d)(?=(\d{3})+$)/g, '$1,');
};

23.实现随机颜色值

var randomColor = function () {
    var letters = '0123456789ABCDEF';
    var ret = '#';

    for (var i = 0; i < 6; i++) {
        ret += letters[Math.round(Math.random() * 15)];
    }

    return ret;
};
var randomColor = function () {
    return '#' + Math.random().toString(16).substr(2, 6);
};

24.时间格式化输出

//formatDate(new Date(1409894060000), 'yyyy-MM-dd HH:mm:ss 星期w') 2014-09-05 13:14:20 星期五
function formatDate(oDate, sFormation) {
    var obj = {
        yyyy:oDate.getFullYear(),
        yy:(""+ oDate.getFullYear()).slice(-2),//非常精辟的方法
        M:oDate.getMonth()+1,
        MM:("0"+ (oDate.getMonth()+1)).slice(-2),
        d:oDate.getDate(),
        dd:("0" + oDate.getDate()).slice(-2),
        H:oDate.getHours(),
        HH:("0" + oDate.getHours()).slice(-2),
        h:oDate.getHours() % 12,
        hh:("0"+oDate.getHours() % 12).slice(-2),
        m:oDate.getMinutes(),
        mm:("0" + oDate.getMinutes()).slice(-2),
        s:oDate.getSeconds(),
        ss:("0" + oDate.getSeconds()).slice(-2),
        w:['日', '一', '二', '三', '四', '五', '六'][oDate.getDay()]
    };
    return sFormation.replace(/([a-z]+)/ig,function($1){return obj[$1]});
}

25.斐波那契数列

function fibonacci(n) {
    if(n ==1 || n == 2){
        return 1
    }
    return fibonacci(n - 1) + fibonacci(n - 2);
}

26.数组去重


Array.prototype.distinct=function(){
    var arr=[];
    var obj={};
    for(var i=0;i<this.length;i++){
        if(obj[this[i]]==undefined)
            obj[this[i]]=this[i];
        else if(obj[this[i]])
            arr.push(this[i]);
    }
    return arr;
 }

27.删除元素

function array_delete($array, $element) {
    return array_diff($array, [$element]);
   // if(($key = array_search($array, $element)) !== false) {
      //  unset($array[$key]);
   // }
//$array = array_filter($array, function($e) use ($del_val) {
 //   return ($e !== $del_val);
//});
//$array = array(14,22,37,42,58,61,73,82,96,10);
//array_splice($array, array_search(58, $array ), 1);
}

array_delete( [312, 401, 1599, 3], 401 ) // returns [312, 1599, 3]

28.RandomString

def random_string(length):
    return ''.join(random.choice(string.letters + string.digits) for i in xrange(length))


function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}
//$randomString = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
//$string = bin2hex(openssl_random_pseudo_bytes(10));20 char long hexdec string

29.保存文件

$ch = curl_init('http://example.com/image.php');
$fp = fopen('/my/folder/flower.gif', 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);

30.插入数组元素

function array_insert(&$array, $position, $insert)
{
    if (is_int($position)) {
        array_splice($array, $position, 0, $insert);
    } else {
        $pos   = array_search($position, array_keys($array));
        $array = array_merge(
            array_slice($array, 0, $pos),
            $insert,
            array_slice($array, $pos)
        );
    }
}
$arr = [
    "name"  => [
        "type"      => "string",
        "maxlength" => "30",
    ],
    "email" => [
        "type"      => "email",
        "maxlength" => "150",
    ],
];

array_insert(
    $arr,
    "email",
    [
        "phone" => [
            "type"   => "string",
            "format" => "phone",
        ],
    ]
);
// ->
array (
  'name' =>
  array (
    'type' => 'string',
    'maxlength' => '30',
  ),
  'phone' =>
  array (
    'type' => 'string',
    'format' => 'phone',
  ),
  'email' =>
  array (
    'type' => 'email',
    'maxlength' => '150',
  ),
)

31.验证ip


function validate_ip($ip)
    {
        if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE) === false)
            return false;
        if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE) === false)
            return false;
        if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === false && filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false)
            return false;

        return true;
    }
    function validate_ip($ip)
{
    if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) === false)
    {
        return false;
    }

    self::$ip = sprintf('%u', ip2long($ip)); // you seem to want this

    return true;
}

32.get ip

function get_ip_address(){
    foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key){
        if (array_key_exists($key, $_SERVER) === true){
            foreach (explode(',', $_SERVER[$key]) as $ip){
                $ip = trim($ip); // just to be safe

                if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){
                    return $ip;
                }
            }
        }
    }
}

33.选出最长的单词

function LongestWord(sen) {
    var words = sen.match(/\w+/g);
    if (words !== null) {
        var maxWords = {
            index: 0,
            length: 0
        };
        for (var i = 0, length = words.length; i < length; i++) {
            if (words[i].length > maxWords.length) {
                maxWords = {
                    index: i,
                    length: words[i].length
                }
            }
        }
        return words[maxWords.index];
    }
    return words;
}

34.map

var oldArr = [{first_name:"Colin",last_name:"Toh"},{first_name:"Addy",last_name:"Osmani"},{first_name:"Yehuda",last_name:"Katz"}];

function getNewArr(){
        
    return oldArr.map(function(item,index){
        item.full_name = [item.first_name,item.last_name].join(" ");
        return item;
    });
    
}

35.统计一个数组中有多少个不重复的单词

var arr = ["apple","orange","apple","orange","pear","orange"];
//https://github.com/es-shims/es5-shim
function getWordCnt(){
    var obj = {};
    
    for(var i= 0, l = arr.length; i< l; i++){
        var item = arr[i];
        obj[item] = (obj[item] +1 ) || 1;//obj[item]为undefined则返回1
    }
    
    return obj;
}
function getWordCnt(){
    return arr.reduce(function(prev,next){
        prev[next] = (prev[next] + 1) || 1;
        return prev;
    },{});
}

36.约瑟夫环

function yuesefu($n,$m) {  
    $r=0;  
    for($i=2; $i<=$n; $i++) {
        $r=($r+$m)%$i;  
    }
    return $r+1;  
}  
echo yuesefu(10,3)."是猴王";

37.判断一个字符串中的字符是否都在另一个中出现

function charsissubset($h, $n) {
    return preg_match('/[^' . preg_quote($h) . ']/u', $n) ? 0 : 1;
}

echo charsissubset('abcddcba', 'abcde'); // false
echo charsissubset('abcddcba', 'abcd'); // true
echo charsissubset('abcddcba', 'badc'); // true
echo charsissubset('汉字', '字'); // true
echo charsissubset('汉字', '漢字'); // false

38.add(2)(3)(4)

function add(a) {
  var temp = function(b) {
    return add(a + b);
  }
  temp.valueOf = temp.toString = function() {
    return a;
  };
  return temp;
}
var ans = add(2)(3)(4);//9
function add(num){
  num += ~~add;
  add.num = num;
  return add;
}
add.valueOf = add.toString = function(){return add.num};
var ans = add(3)(4)(5)(6);  // 18

39.打印出Fibonacci数

function fn(n) {
  var a = [];
  a[0] = 0, a[1] = 1;
  for(var i = 2; i < n; i++)
    a[i] = a[i - 1] + a[i - 2];
  for(var i = 0; i < n; i++)
    console.log(a[i]);
}

40.把URL参数解析为一个对象

function parseQueryString(url) {
  var obj = {};
  var a = url.split('?');
  if(a.length === 1) return obj;
  var b = a[1].split('&');
  for(var i = 0, length = b.length; i < length; i++) {
    var c = b[i].split('=');
    obj[c[0]] = c[1];
  }
  return obj;
}
var url = 'http://witmax.cn/index.php?key0=0&key1=1&key2=2';
var obj = parseQueryString(url);
console.log(obj.key0, obj.key1, obj.key2);  // 0 1 2 

41.判断数据类型

function isNumber(obj) {
    return Object.prototype.toString.call(obj) === '[object Number]'
}//对于NaN也返回true
function isNumber(obj) {
    return obj === +obj
}
// 判断字符串
function isString(obj) {
    return obj === obj+''
}
// 判断布尔类型
function isBoolean(obj) {
    return obj === !!obj
}

42.javascript sleep

function sleep(numberMillis) {
    var now = new Date();
    var exitTime = now.getTime() + numberMillis;
    while (true) {
        now = new Date();
        if (now.getTime() > exitTime)
        return;
    }
}

43.爬虫

def splider():
    # -*- coding:utf-8 -*-
    #发送data表单数据
    import urllib2
    import urllib
    url = "http://www.someserver.com/register.cgi"
    values = {
        'name' : 'Andrew',
        'location' : 'NJU',
        'language' : 'Python'
    }
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' 
    header = {'User-Agent' : user_agent}
    data = urllib.urlencode(values) #data数据需要编码成标准形式
    #print data
    http_handler = urllib2.HTTPHandler(debuglevel = 1)#Debug log
    https_handler = urllib2.HTTPSHandler(debuglevel = 1)
    opener = urllib2.build_opener(http_handler, https_handler)
    urllib2.install_opener(opener)
    req = urllib2.Request(url, data) #发送请求同时传送data表单
    #req = urllib2.Request(url, data, header) #url 表单数据 伪装头部
    reponse = urllib2.urlopen(req, timeout=10) #接受反馈数据
    html = reponse.read() #读取反馈数据
    print response.info()
    print response.getcode()
    redirected = response.geturl() == url
    """
    full_url = url + '?' + data
    data = urllib2.open(full_url)
    """
    #返回错误码, 200不是错误, 不会引起异常
    headers = {
    'Referer': 'http://www.cnbeta.com/articles'
    }
    proxy_handler = urllib2.ProxyHandler({"http" : 'http://some-proxy.com:8080'})
    opener = urllib2.build_opener(proxy_handler)
    urllib2.install_opener(opener)  #urllib2.install_opener() 会设置 urllib2 的全局 opener
    req = urllib2.Request(
    url = 'http://secure.verycd.com/signin/*/http://www.verycd.com/',
    data = post_data, 
    headers = headers
    )
    try:
        urllib2.urlopen(req)
    except urllib2.HTTPError, e:
        print e.code
        #print e.read()

44.判断数据类型

function type(o) {
    var t, c, n;
    if (o === null) 
        return "null";
    if (o !== o)
        return "nan";
    if ((t = typeof o) !== "object") 
        return t;  // 识别原始值的类型和函数
    if ((c = classof(o)) !== "Object")
        return c;  // 识别出大多数内置类型
    if (o.constructor && typeof o.constructor === "function" &&
        (n = o.constructor.getName()))
        return n;  //如果对象构造函数名字存在, 则返回
    return "Object";  // 无法识别类型返回"Object"
}
function classof(o) {
    return Object.prototype.toString.call(o).slice(8, -1);
}
Function.prototype.getName = function() {
    if ("name" in this)
        return this.name;
    return this.name = this.toString().match(/function\s*([^(]*)\(/)[1];
}

45.实现千分位分隔

function mysplit(s){
        if(/[^0-9\.]/.test(s)) return "invalid value";
        s=s.replace(/^(\d*)$/,"$1.");
        s=(s+"00").replace(/(\d*\.\d\d)\d*/,"$1");
        s=s.replace(".",",");
        var re=/(\d)(\d{3},)/;
        while(re.test(s))
            s=s.replace(re,"$1,$2");
        s=s.replace(/,(\d\d)$/,".$1");
        return "¥" + s.replace(/^\./,"0.")
    }

46.随机产生颜色

function randomVal(val){
        return Math.floor(Math.random()*(val + 1));
    }

    function randomColor(){
        return 'rgb(' + randomVal(255) + ',' + randomVal(255) + ',' + randomVal(255) + ')';
    }

47.生成随机的IP地址,规则类似于192.168.11.0/24

RANDOM_IP_POOL=['192.168.10.222/0']
def __get_random_ip():
    str_ip = RANDOM_IP_POOL[random.randint(0,len(RANDOM_IP_POOL) - 1)]
    str_ip_addr = str_ip.split('/')[0]
    str_ip_mask = str_ip.split('/')[1]
    ip_addr = struct.unpack('>I',socket.inet_aton(str_ip_addr))[0]
    mask = 0x0
    for i in range(31, 31 - int(str_ip_mask), -1):
        mask = mask | ( 1 << i)
    ip_addr_min = ip_addr & (mask & 0xffffffff)
    ip_addr_max = ip_addr | (~mask & 0xffffffff)
    return socket.inet_ntoa(struct.pack('>I', random.randint(ip_addr_min, ip_addr_max)))

48.倒计时

var total = 500;
var timer = null;

var tiktock = document.getElementById('tiktock');
var btn = document.getElementById('btn');

function countdown(){
    timer = setInterval(function(){
        total--;
        if (total<=0) {
            clearInterval(timer);
            tiktock.innerHTML= "0:00";
        }else{
            var ss = Math.floor(total/100);
            var ms = total-Math.floor(total/100)*100;
            tiktock.innerHTML=ss + ":" + ms;
        }
    },10);
};
btn.addEventListener('click', countdown, false);

49.[1,2,3] ->'{1,2,3}'

class intSet(object):

def __init__(self):
    # creat an empty set of integers
    self.vals = []

def insert(self, e):
    # assume e is an interger, and insert it 
    if not(e in self.vals):
        self.vals.append(e)

def member(self, e):
    return e in self.vals

def remove(self, e):
    try:
        self.vals.remove(e)
    except:
        raise ValueError(str(e) + 'not found')


def __str__(self):
    # return a string representation of self
    self.vals.sort()
    return "{" + ','.join([str(e) for e in self.vals]) + "}"

50.转义过滤

//纯数字的参数intval强制取整
//其他参数值进行过滤或者转义
//filter_input() 函数来过滤一个 POST 变量
if (!filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL))
 {
 echo "E-Mail is not valid";
 }
else
 {
 echo "E-Mail is valid";
 }
    protected function zaddslashes($string, $force = 0, $strip = FALSE)
    {   
        if (!defined('MAGIC_QUOTES_GPC'))
        {   
         define('MAGIC_QUOTES_GPC', '');
        }   
        if (!MAGIC_QUOTES_GPC || $force)
        {   
         if (is_array($string)) {
             foreach ($string as $key => $val)
             {   
                 $string[$key] = $this->zaddslashes($val, $force, $strip);
             }   
         }   
         else
         {   
             $string = ($strip ? stripslashes($string) : $string);
             $string = htmlspecialchars($string);
         }   
        }   
        return $string;
     }

51.构造IP

function getIPaddress()
{
    $IPaddress = '';
    if (isset($_SERVER)) {
        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
            $IPaddress = $_SERVER["HTTP_X_FORWARDED_FOR"];
        } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
            $IPaddress = $_SERVER["HTTP_CLIENT_IP"];
        } else {
            $IPaddress = $_SERVER["REMOTE_ADDR"];
        }
    } else {
        if (getenv("HTTP_X_FORWARDED_FOR")) {
            $IPaddress = getenv("HTTP_X_FORWARDED_FOR");
        } else if (getenv("HTTP_CLIENT_IP")) {
            $IPaddress = getenv("HTTP_CLIENT_IP");
        } else {
            $IPaddress = getenv("REMOTE_ADDR");
        }
    }
    return $IPaddress;
}
function curlPost($url, $post='', $autoFollow=0){
        $ch = curl_init();
        $user_agent = 'Safari Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.73.11 (KHTML, like Gecko) Version/7.0.1 Safari/5
        curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
        
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($ch, CURLOPT_HEADER, 0); 
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:61.135.169.125', 'CLIENT-IP:'.getIPaddress()));  //构造IP
        curl_setopt($ch, CURLOPT_REFERER, "http://www.baidu.com/");   //构造来路
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
        if($autoFollow){
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);  //启动跳转链接
            curl_setopt($ch, CURLOPT_AUTOREFERER, true);  //多级自动跳转
        }   
        //  
        if($post!=''){
            curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
        }   
        
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }

52.文件名生成唯一

function unique_filename() {
    $time = !empty($_SERVER['REQUEST_TIME_FLOAT']) ? $_SERVER['REQUEST_TIME_FLOAT'] : mt_rand();
    $addr = !empty($_SERVER['REMOTE_ADDR'])        ? $_SERVER['REMOTE_ADDR']        : mt_rand();
    $port = !empty($_SERVER['REMOTE_PORT'])        ? $_SERVER['REMOTE_PORT']        : mt_rand();
    $ua   = !empty($_SERVER['HTTP_USER_AGENT'])    ? $_SERVER['HTTP_USER_AGENT']    : mt_rand();
    return md5(uniqid(mt_rand(), true).$time.$addr.$port.$ua.mt_rand());
}

53.PHP实现钩子和插件系统

/**
 * Attach (or remove) multiple callbacks to an event and trigger those callbacks when that event is called.
 * 绑定或移除多个回调函数到事件,当事件被调用时触发回调函数.
 *
 * @param string $event name
 * @param mixed  $value the optional value to pass to each callback
 * @param mixed  $callback the method or function to call - FALSE to remove all callbacks for event
 */
function event($event, $value = NULL, $callback = NULL) {
    static $events;
    if($callback !== NULL) {
        if($callback) {
            $events[$event][] = $callback; // 添加事件
        } else {
            unset($events[$event]); // 移除事件里所有的回调函数
        }
    } else if(isset($events[$event])) {
        foreach($events[$event] as $function) {
            $value = call_user_func($function, $value); // 调用事件
        }
        return $value;
    }
}
// 添加事件
event('filter_text', NULL, function($text) { return htmlspecialchars($text); });
event('filter_text', NULL, function($text) { return nl2br($text); });
// 移除事件里所有的回调函数
// event('filter_text', NULL, FALSE);
// 调用事件
$text = event('filter_text', $_POST['text']);

54.字符串首字母大写的实现方式

String.prototype.firstUpperCase = function(){
    return this.replace(/\b(\w)(\w*)/g, function($0, $1, $2) {
        return $1.toUpperCase() + $2.toLowerCase();
    });
}
//这只能改变字符串首字母
String.prototype.firstUpperCase=function(){
    return this.replace(/^\S/,function(s){return s.toUpperCase();});
}

55.获取url参数

 function getQueryString(key){
        var reg = new RegExp("(^|&)"+key+"=([^&]*)(&|$)");
        var result = window.location.search.substr(1).match(reg);
        return result?decodeURIComponent(result[2]):null;
      }
function getRequest() {   
       var url = window.location.search; //获取url中"?"符后的字串   
       var theRequest = new Object();   
       if (url.indexOf("?") != -1) {   
          var str = url.substr(1);   
          strs = str.split("&");   
          for(var i = 0; i < strs.length; i ++) {   
             theRequest[strs[i].split("=")[0]]=decodeURI(strs[i].split("=")[1]); 

          }   
       }   
       return theRequest;   
    }

56.过滤

var array = [
    {
        "title": 123,
        "num": 1,
        "type": [{"name": 'A', "num": 1}, {"name": 'B', "num": 1}, {"name": 'C', "num": 0}]
    }, {
        "title": 321,
        "num": 1,
        "type": [{"name": 'D', "num": 0}, {"name": 'E', "num": 1}, {"name": 'F', "num": 0}]
    }];

array.forEach(function (x) {
    x.type = x.type.filter(function (y) {
        return y.num != 0;
    });
});

57.随机生成-50到50之间的不包括0的整数

function my_rand(){
    $num = mt_rand(1, 50); 
    $rand = mt_rand(1, 10);

    return $rand > 4 ? $num : -$num;//控制生成正负数的比例为4:6
}

58.时间对比

function compareDate(date1, date2){
      var  difArr, unitArr;

      date1 = new Date(date1);
      date2 = new Date(date2);
      difArr = [date1.getFullYear() - date2.getFullYear(), date1.getMonth() -date2.getMonth(),date1.getDate() - date2.getDate(),date1.getHours() - date2.getHours(), date1.getMinutes() - date2.getMinutes(),date1.getSeconds() - date2.getSeconds()];
      unitArr = ['年','月','日','时','分','秒']
      for(var i = 0; i < 6;i++){
        if(difArr[i] !== 0){
          return Math.abs(difArr[i]) + unitArr[i];
        }
      }
    }

59.数组去重

//传入数组
  function unique(arr){
    var tmpArr = [];
    for(var i=0; i<arr.length; i++){
      //如果当前数组的第i已经保存进了临时数组,那么跳过,
      //否则把当前项push到临时数组里面
      if(tmpArr.indexOf(arr[i]) == -1){
        tmpArr.push(arr[i]);
      }
    }
    return tmpArr;
  }

60.继承

/*
 * 基类,定义属性
 */
function Person(name, age) {
    this.name = name;
    this.age = age;
}

/*
 * 基类,定义方法
 */
Person.prototype.selfIntroduce = function () {
    console.log("name: " + this.name);
    console.log("age: " + this.age);
}

/*
 * 子类,定义子类的属性
 */
function Student(name, age, school) {
  // 调用基类的构造函数
    Person.call(this, name, age);
    this.school = school;
}

// 使子类继承基类
Student.prototype = new Person();

/*
 * 定义子类的方法
 */
Student.prototype.goToSchool = function() {
  // some code..
}

/*
 * 扩展并调用了超类的方法
 */
Student.prototype.selfIntroduce = function () {
    Student.prototype.__proto__.selfIntroduce.call(this);
    console.log("school: " + this.school);
}

var student = new Student("John", 22, "My School");
student.selfIntroduce();

61.Unicode和Utf-8编码的互相转换

/**
 * utf8字符转换成Unicode字符
 * @param  [type] $utf8_str Utf-8字符
 * @return [type]           Unicode字符
 */
function utf8_str_to_unicode($utf8_str) {
    $unicode = 0;
    $unicode = (ord($utf8_str[0]) & 0x1F) << 12;
    $unicode |= (ord($utf8_str[1]) & 0x3F) << 6;
    $unicode |= (ord($utf8_str[2]) & 0x3F);
    return dechex($unicode);
}

/**
 * Unicode字符转换成utf8字符
 * @param  [type] $unicode_str Unicode字符
 * @return [type]              Utf-8字符
 */
function unicode_to_utf8($unicode_str) {
    $utf8_str = '';
    $code = intval(hexdec($unicode_str));
    //这里注意转换出来的code一定得是整形,这样才会正确的按位操作
    $ord_1 = decbin(0xe0 | ($code >> 12));
    $ord_2 = decbin(0x80 | (($code >> 6) & 0x3f));
    $ord_3 = decbin(0x80 | ($code & 0x3f));
    $utf8_str = chr(bindec($ord_1)) . chr(bindec($ord_2)) . chr(bindec($ord_3));
    return $utf8_str;
}

62.gzip编码

function curl_get($url, $gzip=false){
 $curl = curl_init($url);
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
 if($gzip) curl_setopt($curl, CURLOPT_ENCODING, "gzip"); // 关键在这里
 $content = curl_exec($curl);
 curl_close($curl);
 return $content;
}
$url = 'http://api.stackexchange.com/2.2/tags?order=asc&sort=popular&site=stackoverflow&tag=qt';
//$data = file_get_contents("compress.zlib://".$url);

63.Python中文时间

#!/usr/bin/env 
# -*- coding: utf-8 -*-

from datetime import datetime
nt=datetime.now()
print(nt.strftime('%Y年%m月%d日 %H时%M分%S秒').decode('utf-8'))#2015年08月10日 11时25分04秒
print(nt.strftime('%Y{y}%m{m}%d{d}').format(y='年', m='月', d='日'))

64.list分组,按照下标顺序分成3组:[3, 8, 9] [4, 1, 10] [6, 7, 2, 5]

a=[1,2,3,4,5,6,7,8,9,10]
[a[i:i+3] for i in xrange(0,len(a),3)]

64.curl上传文件

$ch = curl_init();

$data = array('name' => 'Foo', 'file' => '@/home/vagrant/test.png');

curl_setopt($ch, CURLOPT_URL, 'http://localhost/test/curl/load_file.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);    // 5.6 给改成 true了, 弄回去 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_exec($ch);

65.IP地址转换为整数型

$ipArr  = explode('.',$_SERVER['REMOTE_ADDR']);
$ip     = $ipArr[0] * 0x1000000
        + $ipArr[1] * 0x10000
        + $ipArr[2] * 0x100
        + $ipArr[3];
        //数字型的IP转为字符型:
$ipVal = $row['client_IP'];
$ipArr = array(
        0 => floor(  $ipVal / 0x1000000) );
$ipVint   = $ipVal-($ipArr[0]*0x1000000); // for clarity
$ipArr[1] = ($ipVint & 0xFF0000)  >> 16;
$ipArr[2] = ($ipVint & 0xFF00  )  >> 8;
$ipArr[3] =  $ipVint & 0xFF;
$ipDotted = implode('.', $ipArr);

66.保存base64图片

$base64_url = 'data:image/jpeg;base64,xxxxxxxxxxxxxxxxxxxxxx';
$base64_body = substr(strstr($base64_url,','),1);
$data= base64_decode($base64_body );

//存储or创建图片:

file_put_contents($file_path,$data);

或$image = imagecreatefromstring($data);
 $size  =  getimagesizefromstring ( $data);var_dump($size);

//读取图片文件,转换成base64编码格式
$image_file = 'test.jpg';
$image_info = getimagesize($image_file);
$base64_image_content = "data:{$image_info['mime']};base64," . chunk_split(base64_encode(file_get_contents($image_file)));
 
//保存base64字符串为图片
//匹配出图片的格式
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){
  $type = $result[2];
  $new_file = "./test.{$type}";
  if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_image_content)))){
    echo '新文件保存成功:', $new_file;
  }
 
}
?>
 
<img src="<?php echo $base64_image_content;?>" />

67.日志记录print_r( $value, true )

/**

错误日志类
*/
class C_Log
{
/**

日志保存目录

@var string
*/
private $path = '';
/**

只能运行一个实例

@var [type]
*/
private static $instance;
/**

构造函数

初始化日志文件地址
*/
function __construct($path)
{
$this->path = $path;
}

public function logPrint($name,$value)
{

   //获取时间
   $_o = date('Y-m-d H:m:s',time())."\r\n";
   $_o .= "==".  $name . "==";
   //打印内容
   if( is_array( $value ) || is_object( $value ) ){
       $_o .= print_r( $value, true ). "\r\n";
     } else {
         $_o .= $value. "\r\n";
     }
     //输出到文件
     $this->_log($_o);
}
/**fdf

打印日志

@return [type] [description]
*/
private function _log($log){
error_log($log,3,$this->path);
}
/**

输出日志

@return [type] [description]
*/
public static function log($name, $value)
{
if (empty(self::$instance)) {

   self::$instance = new C_Log(__DIR__."/error_log.log");
}
self::$instance->logPrint($name, $value);
}
}

68.过滤子类

function getByClass(parent, classname) {
    var tags = parent.getElementsByTagName('*');
    return [].filter.call(tags, function(t) {
        return t.classList.contains(classname);
    });
}
//

function getByClass(parent, classname) {
    return parent.querySelectorAll("." + classname);
}

69.JSON.stringify

function setProp(obj) {
    for (var p in obj) {
        switch (typeof (obj[p])) {
            case 'object':
                setProp(obj[p]);
                break;
            case 'undefined':
                obj[p] = '';
                break;
        }
    }
    return obj;
}

JSON.stringify(setProp({ a: 1, b: 2, c: undefined }));//{"a":1,"b":2,"c":""}

70.判断用户的IP是否局域网IP

function is_local_ip($ip_addr = null) {
    if (is_null($ip_addr)) {
        $ip_addr = $_SERVER['REMOTE_ADDR'];
    }
    $ip = ip2long($ip_addr);
    return $ip & 0xffff0000 == 0xc0a80000 // 192.168.0.0/16
        || $ip & 0xfff00000 == 0xac100000 // 172.16.0.0/12
        || $ip & 0xff000000 == 0xa0000000 // 10.0.0.0/8
        || $ip & 0xff000000 == 0x7f000000 // 127.0.0.0/8
    ;
}

71.遍历出当月的所有日子和星期

var d = new Date();         // 这是当天
d.setDate(1);               // 这就是1号
var weekday = d.getDay();   // 1号星期几,从星期天为0开始

d.setMonth(d.getMonth() + 1);
d.setDate(0);               // 这两句得到最当月最后一天
var end = d.getDate();      // 最后一天的日,比如8月就是31

var days = [];
for (var i = 0; i < end; i++) {
    days[i] = {
        day: i + 1,
        week: (weekday + i) % 7
    }
}


console.log(days);

72.Downloading Data From localStorage

var myData = {
    'a': 'a',
    'b': 'b',
    'c': 'c'
};
// add it to our localstorage
localStorage.setItem('data', JSON.stringify(myData));

// encode the data into base64
base64 = window.btoa(localStorage.getItem('data'));

// create an a tag
var a = document.createElement('a');
a.href = 'data:application/octet-stream;base64,' + base64;
a.innerHTML = 'Download';

// add to the body
document.body.appendChild(a);

73."数据类型"判断函数

function datatypeof(arg){
    return Object.prototype.toString.call(arg).match(/\[object\s(\w+)\]/)[1];
}

74.二维数组去除重复,重复值相加

$arr = array(
    array('id' => 123, 'name' => '张三', 'amount'=>'1'),
    array('id' => 123, 'name' => '李四', 'amount' => '1'),
    array('id' => 124, 'name' => '王五', 'amount' => '1'),
    array('id' => 125, 'name' => '赵六', 'amount' => '1'),
    array('id' => 126, 'name' => '赵六', 'amount' => '2'),
    array('id' => 126, 'name' => '赵六', 'amount' => '2')
);

$new = array();

foreach($arr as $row){
    if(isset($new[$row['name']])){
        $new[$row['name']]['amount'] += $row['amount'];
    }else{
        $new[$row['name']] = $row;
    }
}

75.含有从属关系的元素重新排列

$arr = array(
    array('id'=>21, 'pid'=>0, 'name'=>'aaa'),
    array('id'=>22, 'pid'=>0, 'name'=>'bbb'),
    array('id'=>23, 'pid'=>0, 'name'=>'ccc'),
    array('id'=>24, 'pid'=>23, 'name'=>'ddd'),
    array('id'=>25, 'pid'=>23, 'name'=>'eee'),
    array('id'=>26, 'pid'=>22, 'name'=>'fff'),
    );

$temp=[];
foreach ($arr as $item)
{
    list($id,$pid,$name) = array_values($item); // 取出数组的值并分别生成变量

    if(array_key_exists($pid, $temp)) 
    // 检查临时数组$temp中是否存在键名与$pid的值相同的键
    {
        $temp[$pid]['child'][]=array('id'=>$id,'pid'=>$pid,'name'=>$name);
        // 如果存在则新增数组至临时数组中键名为 $pid 的子元素 child 内
    }else
        $temp[$id]=array('id'=>$id,'pid'=>$pid,'name'=>$name);
        // 如果不存在则新增数组至临时数组中并设定键名为 $id
}

$array = array_values($temp);
// 将临时数组中以 $id 为键名的键修改为数字索引

echo "<pre>";
print_r($array);
//or 
foreach ($arr as $item)
{
    if (array_key_exists($item['pid'], $temp))
    {       
        $temp[$item['pid']]['child'][]=$item;
    }else
        $temp[$item['id']]=$item;
}

76.随机中文字符

//正则表达式匹配中文[\u4e00-\u9fa5]
//parseInt("4E00",16) 19968 parseInt("9FA5",16);20901
var randomHz=function(){
    eval( "var word=" +  '"\\u' + (Math.round(Math.random() * 20901) + 19968).toString(16)+'"');
    return word;
}
for(i=0;i<100;i++){
    console.log(randomHz());
}

77.jQuery解析url

$(document).ready(function () {
    var url = 'http://iwjw.com/codes/code-repository?id=12#top';
    var a = $('<a>', { href: url});
    var sResult = '<b>Protocol:</b> ' + a.prop('protocol') + '<br>'     + '<b>Host name: </b>' + a.prop('hostname') + '<br>'
    + '<b>Path: </b>' + a.prop('pathname') + '<br>'
    + '<b>Query: </b>' + a.prop('search') + '<br>'
    + '<b>Hash: </b>' + a.prop('hash');
    $('span').html(sResult);
});

78.用JS实现一个数组合并的方法(要求去重)

var arr1 = ['a'];
var arr2 = ['b', 'c'];
var arr3 = ['c', ['d'], 'e', undefined, null];

var concat = (function(){
  // concat arr1 and arr2 without duplication.
  var concat_ = function(arr1, arr2) {
    for (var i=arr2.length-1;i>=0;i--) {
      arr1.indexOf(arr2[i]) === -1 ? arr1.push(arr2[i]) : 0;
    }
  };
  // concat arbitrary arrays.
  // Instead of alter supplied arrays, return a new one.
  return function(arr) {
    var result = arr.slice();
    for (var i=arguments.length-1;i>=1;i--) {
      concat_(result, arguments[i]);
    }
    return result;
  };
}());
执行:concat(arr1, arr2, arr3)
返回:[ 'a', null, undefined, 'e', [ 'd' ], 'c', 'b' ]
var merge = function() {
    return Array.prototype.concat.apply([], arguments)
  }

merge([1,2,4],[3,4],[5,6]);
//[1, 2, 4, 3, 4, 5, 6]

79.字节转化

function convert($size)
{
    $unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb');

    return @round($size / pow(1024, ($i = floor(log($size, 1024)))), 2) . ' ' . $unit[$i];
}
echo convert(memory_get_usage());
function cacheMem($key)
{
    static $mem = null;
    if ($mem === null) {
        $mem = new Memcache();
        $mem->connect('127.0.0.1', 11211);
    }

    $data = $mem->get($key);
    if (empty($data)) {
        $data = date('Y-m-d H:i:s');
        $mem->set($key, $data);
    }

    return $data;
}

苏生不惑
18.9k 声望1.9k 粉丝