合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
小项目,就是那种没有商业项目特别要求(比如涉及支付、手机端、微信版)之类,由个人能一两个月内完全独立的开发完成的项目。 小到一个数学算法问题,大到一个简单的cms、论坛。都算在内。 我认为,博客就是一个很好的锻炼项目。 所以我开发了OneBlog、freelog两个基于bootstrap的现代博客。 每个TPer、每个技术人员都应该有自己的技术博客来管理知识、分享知识和交流问题。 ## 真实例子 有一天,网上我看到了一个密码生成器 ![document/2015-08-23/55d9d081d911e](http://box.kancloud.cn/document_2015-08-23_55d9d081d911e.png) 我在想他背后是怎么实现的呢? 他的需求是什么?我也写一个试试吧。 这个密码生成器的最终目的生成定长的随机字符串,只不过可选供生成的随机字符创的字符范围。 所以他应该有2个参数,字符串类型和长度。关键算法是随机拼长。 在我思考之下写出了这样一个函数: ~~~ /** * 用于生成唯一密码 * @param len int 密码长度 默认8 * @param pattern string 密码字符的范围 第一个是阿拉伯数字 开关 第二个是小写字母 第三个大写字母 第四个是特殊字符 如果 都用到就是1111 至少要有一个1 */ function randpass($len=8, $pattern='1000'){ static $seed = array( '0123456789', 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', '+=-@#~,.[]()!%^*$' ); if(!is_string($pattern) || strpos('1', $pattern) == -1 || strlen($pattern) > count($seed)) send_error('','生成随机字符串模式格式有误');//项目中报错,通用的应该是抛异常 $pattern = str_split($pattern); $randStr = ''; foreach ($pattern as $key => $value) { if($value == '1') $randStr .= $seed[$key]; } // echo $randStr; $temppass = array_fill(0, $len, ''); if(!function_exists('getChar')){ function getChar(&$value, $key, $seed){ $value = $seed[mt_rand(0,strlen($seed)-1)]; } } array_walk($temppass, 'getChar', $randStr); $temppass = implode('', $temppass); return $temppass; } ~~~ 第一步,根据模式拼接随机母串; 第二步,用空字符串填充定长的目标数组; 第三步,遍历数组,将目标数组通过getChar随机函数进行替换值; 最后,将目标数组合并成字符串返回。 我非常同意“十万个小时定律”,要成为一个优秀的程序员,必须花足够的时间在编程上。所以适当的小项目和私活是必要的。