1. 程式人生 > >php實用小代碼

php實用小代碼

php代碼

1、實現中文字符串截取無亂碼方法
開啟mbstring擴展,然後自定義函數:
<?php
header(‘content-Type:text/html:charset=utf-8‘);
function substr_utf8($str, $start, $length = null) {
return join("",
array_slice(
preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $start, $length)
);
}
//實例
$str = "我是一個good男孩!";
echo substr_utf8($str, 2, 4);
2、用PHP打印前一天的時間
<?php
header(‘content-Type:text/html:charset=utf-8‘);
echo date(‘Y-m-d H:i:s‘,strtotime(‘-1 day‘));
3、不適用第三個變量交換2個變量的值
<?php
header(‘content-Type:text/html:charset=utf-8‘);
$a = ‘a‘;
$b = ‘b‘;
list($a,$b) = array($b,$a);
echo $a,$b;
4、將1234567890,轉換成1,234,567,890
header(‘content-Type:text/html:charset=utf-8‘);
$str = ‘1234567890‘;
//反轉字符串
$str = strrev($str);
//使用逗號分隔得到098,765,432,1,
$str = chunk_split($str,3,‘,‘);
//再次反轉
$str = strrev($str);
//去掉左邊的,
$str = ltrim($str,‘,‘);
echo $str;
5、實現utf8字符串反轉
不能使用strrev,中文會出錯
function strrev_utf8($str){
return join("",array_reverse(preg_split("//u",$str)));
}
$str = "我是一個good男孩";
echo strrev_utf8($str);
6、取url的文件擴展名,盡量多的去實現方法
$str = "www.baidu.com/index.php";
function get_ext1($str){
return strrchr($str,‘.‘);
}
function get_ext2($str){
return substr($str,strrpos($str,‘.‘));
}
function get_ext3($str){
$str = pathinfo($str);
return $str[‘extension‘];
}
function get_ext4($str){
$arr = explode(‘.‘,$str);
return $arr[count($arr)-1];
}
function get_ext5($str){
$pattern = ‘/^[^.]+.([\w]+)$/‘;
return preg_replace($pattern,‘${1}‘,basename($str));
}
7、寫一個函數,將字符串open_door轉換為OpenDoor
$str = "open_door";
function changestr($str){
$arr = explode(‘
‘,$str);
$arr = array_map(‘ucfirst‘,$arr);
return implode(‘‘,$arr);
}
echo change_str($str);
8、單例模式
<?php
class Mysql{
private static $instance = null;
private $conn;
//設置為私有,不允許通過new獲得對象
private function construct(){
$conn = mysql_connect(‘localhost‘,‘root‘,‘123456‘);
}
//獲取實例方法
public static function getInstance(){
if(! self::$instance instanceof self){
self::$instance = new self;
}
return self::$instance;
}
//禁止克隆
private function clone(){}
}
$db = Mysql::getInstance();
9、寫一段PHP代碼,確保多個進程同時寫入同一個文件成功
<?php
$fp = fopen("lock.txt","w+");
if(flock($fp,LOCK_EX)){
//獲得寫鎖
fwrite($fp,‘write something‘);
flock($fp,LOCK_UN);
}else{
echo "file is locking...";
}
fclose($fp);
<?php
$fp = fopen("lock.txt","w+");
if(flock($fp,LOCK_EX)){
//獲得寫鎖
fwrite($fp,‘write something‘);
flock($fp,LOCK_UN);
}else{
echo "file is locking...";
}
fclose($fp);
<?php
$url = ‘http://www.baidu.com/a/b/index.php?id=1‘;
$arr = parse_url($url);
$fname = basename($arr[‘path‘]);
$arr = explode(‘.‘,$fname);
echo $arr[count($arr)-1];
11、寫一個函數可以便利一個文件夾下的所有文件和子文件夾
<?php
function my_scandir($dir){
$files = array();
if(is_dir($dir)){
if($handle = opendir($dir)){
while(($file = readdir($handle)) !== false){
if($file != "." && $file != ".."){
if(is_dir($dir.‘/‘.$file)){
$files[$file] = my_scandir($dir.‘/‘.$file);
}else{
$files[] = $dir.‘/‘.$file;
}
}
}
closedir($handle);
return $files;
}
}
}
var_dump(my_scandir(‘D:\wamp\www\study‘));
12、論壇中無限分類實現原理
首先設計數據庫表
create table category(
cate_id int unsigned not null auto_increment primary key,
cat_name varchar(30) not null default ‘‘,
parent_id int unsigned not null default 0
) engine=innodb charset=utf8;
然後用函數去遞歸實現,無限分類
function tree($arr,$pid=0,$level=0){
static $list = array();
foreach($arr as $v){
//如果是頂級分類,則存入$list
//然後以此節點為根幾點,遍歷其子節點
if($v[‘parent_id‘] == $pid){
$v[‘level‘] = $level;
$list[] = $v;
tree($arr,$v[‘cat_id‘],$level+1);
}
}
return $list;
}
13、計算2個文件的相對路徑
<?php
$a = ‘/a/b/c/d/a.php‘;
$b = ‘/a/b/e/f/b.php‘;
$arr1 = explode(‘/‘,dirname($a));
$arr2 = explode(‘/‘,dirname($b));
for($i=0,$len=count($arr2);$i<$len;$i++){
if($arr1[$i] != $arr2[$i]){
break;
}
}
//不在用一個根目錄
if($i == 1){
$ret = array();
}
//在同一個根目錄下
if($i != 1 && $i < $len){
$ret = array_fill(0,$len-$i,"..");
}
//在同一個目錄下
if($i == $len){
$ret = array(‘./‘);
}
$ret = array_merge($ret,array_slice($arr1,$i));
echo implode(‘/‘,$ret);
14、約瑟夫環問題
<?php
function king($n,$m){
$monkey = range(1,$n);
$i = 0;
while(count($monkey) > 1){
$i += 1;
$head = array_shift($monkey);//一個個出列最前面的
if( $i % $m != 0){
//如果不是m的倍數,則返回尾部,否則就出列了
array_push($monkey,$head);
}
}
return $monkey[0];
}
echo king(10,7);
15、PHP實現雙向隊列
<?php
class Dqueue{
private $queue = array();
public function addFirst($item){
return array_unshift($this->queue,$item);
}
public function addLast($item){
return array_push($this->queue,$item);
}
public function getFirst(){
return array_shift($this->queue);
}
public function getLast(){
return array_pop($this->queue);
}
}**

php實用小代碼