存档

文章标签 ‘PHP’

PHP数组函数in_array与array_diff

2010年7月27日 admin 2 条评论

in_array — 检查数组中是否存在某个值
例子:

1
2
3
4
5
6
7
8
9
<?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Got Irix";
}
if (in_array("mac", $os)) {
    echo "Got mac";
}
?>

array_diff() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变。
例子:

1
2
3
4
5
6
7
<?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
 
print_r($result);
?>

用处
判断变量是否在数组中( in_array )
对不在其一数组中的键值进行操作:
例:

1
2
3
4
5
6
7
8
$subArr=array('0'=>'isTitle','1'=>'isUrl','2'=>'isIntro','3'=>'isAuthor','4'=>'isPub_Date','5'=>'isPub_Time', );
$notSelect = array_diff($subArr,$data); //取数组交集,判断没有选中的对象
foreach($notSelect AS $key=>$val)
    {
      $queryNo[]=$val.'=0';
	}
$queryNo=implode(',',$queryNo);
$queryNo= " UPDATE ......   ";
分类: PHP 标签: , , ,

[转]PHP程序61条面向对象分析设计的经验原则

2010年7月14日 admin 没有评论

你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起 。 —– Arthur J.Riel

  (1)所有数据都应该隐藏在所在的类的内部。

  (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者。

  (3)尽量减少类的协议中的消息。

  (4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深拷贝和浅拷贝)、相等性判断、正确输出内容、从ASCII描述解析等等]。

  (5)不要把实现细节(例如放置共用代码的私有函数)放到类的公有接口中。

  如果类的两个方法有一段公共代码,那么就可以创建一个防止这些公共代码的私有函数。

  (6)不要以用户无法使用或不感兴趣的东西扰乱类的公有接口。

  (7)类之间应该零耦合,或者只有导出耦合关系。也即,一个类要么同另一个类毫无关系,要么只使用另一个类的公有接口中的操作。

  (8)类应该只表示一个关键抽象。

  包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包影响,则将对包中的所有类产生影响,而对其他的包不造成任何影响 .

  (9)把相关的数据和行为集中放置。

  设计者应当留意那些通过get之类操作从别的对象中获取数据的对象。这种类型的行为暗示着这条经验原则被违反了。

  (10)把不相关的信息放在另一个类中(也即:互不沟通的行为)。

  朝着稳定的方向进行依赖.
阅读全文…

分类: PHP 标签: ,

Memcached在大型网站中应用

2010年7月11日 admin 没有评论

原文链接:http://tomore.myoow.com/showlog351.html
===================================================
memcached是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。起初作者编写它可能是为了提高动态网页应用,为了减轻数据库检索的压力,来做的这个缓存系统。它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时访问这个缓存系统, 这种方法不仅解决了共享内存只能是单机的弊端, 同时也解决了数据库检索的压力,最大的优点是提高了访问获取数据的速度!基于memcached作者对分布式cache的理解和解决方案。memcached完全可以用到其他地方 比如分布式数据库, 分布式计算等领域。
阅读全文…

分类: PHP 标签: ,

数组&&字符串 相互转换函数(PHPCMS)

2010年5月15日 admin 没有评论

将数组类型直接插入MYSQL时插入不进为ARRAY
插入数据前把你的数组序列化:
serialize($list);
读出的时候再使用
unserialize($list);

PHPCMS直接将数组存入数据库的函数。
数组转化为字符串: array2string

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function array2string($string, $isformdata = 1)
{
	if($string == '') return '';
	if($isformdata) $string = new_stripslashes($string);
	return addslashes(var_export($string, TRUE));
}
 
 
function new_stripslashes($string)
{
	if(!is_array($string)) return stripslashes($string);
	foreach($string as $key => $val) $string[$key] = new_stripslashes($val);
	return $string;
}

stripslashes 函数:
Returns a string with backslashes stripped off. (\’ becomes ‘ and so on.) Double backslashes (\\) are made into a single backslash (\).
该函数用于清理从数据库或 HTML 表单中取回的数据。
删除由 addslashes() 函数添加的反斜杠。

字符串转化为数组:输出。

1
2
3
4
5
6
function string2array($data)
{
	if($data == '') return array();
	eval("\$array = $data;");
	return $array;
}

eval
将值代入字符串之中。

语法: void eval(string code_str);
传回值: 无
函式种类: 数据处理

内容说明:
本函式可将字符串之中的变量值代入,通常用在处理数据库的数据上。参数 code_str 为欲处理的字符串。值得注意

的是待处理的字符串要符合 PHP 的字符串格式,同时在结尾处要有分号。使用本函式处理后的字符串会沿续到 PHP

程序结束。

分类: PHP 标签: , , ,

PHP合并拆分数组

2010年2月27日 admin 没有评论

合并数组有三个函数:
1.array_combine()

携带两个参数数组,参数数组一的值作新数组的键,参数数组二的值作新数组的值。很简单。

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
< ?php 
$a = array('green', 'red', 'yellow'); 
$b = array('avocado', 'apple', 'banana'); 
$c = array_combine($a, $b); 
 
print_r($c); 
?> 
< ?php
$a = array('green', 'red', 'yellow');
$b = array('avocado', 'apple', 'banana');
$c = array_combine($a, $b);
 
print_r($c);
?>

上例将输出:

1
2
3
4
5
6
7
8
9
10
11
12
Array 
( 
[green] => avocado 
[red] => apple 
[yellow] => banana 
) 
Array
(
[green] => avocado
[red] => apple
[yellow] => banana
)

阅读全文…

分类: PHP 标签: , , ,

利用Jpgraph绘制统计图

2010年2月3日 admin 没有评论

最近有个小系统要绘制统计图,没有做过,网上找了几个类试了下,没有很合适的,open-flash-chart 很好,但是对于我这新手来说还是比较复杂的,例子也少。正好以前买的本书《大道PHP》 上第29章有一讲是 用Jpgraph 画图的。挺简单的,输入数据就能出图, 看了下例子,拿来用用(最简单的)。
系统还没有做完,先把简单的统计图弄上来。 访问地址
要过年了,在家也不能上网,祝大家新年快乐哦。 ^_^

关键代码

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
32
33
34
35
36
37
38
39
40
include("config.php");
include("include/jpgraph.php");
include("include/jpgraph_line.php");
//创建背景图像
$resultNum=mysql_query("select * from down_flow ");
//将查询结果设为X坐标和Y坐标显示的数据
$i=0;
while($it=mysql_fetch_array($resultNum)){
	$datay[$i]=(int)$it['flow2'];
	$datax[$i]=(int)$it['hour'];
	$i++;
}
$graph=new Graph(820,490);
//设置刻度样式
$graph->SetScale("intint");
//$graph->SetScale("textint",1000,9500,1,24);
//设置边界范围
$graph->img->SetMargin(40,30,60,10);
//设置标题
$graph->title->Set("统计图");
// 设置中文字体
$graph->title->setFont(FF_SIMSUN,FS_BOLD);
 
 
//定义曲线图
 
$lineplot=new LinePlot($datay,$datax);
//改变曲线图颜色为蓝色
$lineplot->SetColor("blue");
//设置曲线的图例
$lineplot->SetLegend("dataFlow");
$lineplot->setFont(FF_SIMSUN,FS_BOLD);
 
 
 
//将曲线图加入背景图像中
$graph->Add($lineplot);
//将X-Y坐标图输出
$graph->Stroke();
?>
分类: PHP 标签: , ,

PHP二分查找

2009年12月6日 admin 没有评论
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
<?php
function bin_sch($array, $low, $high, $k){ 
if ($low <= $high){ 
$mid = intval(($low+$high)/2); 
if ($array[$mid] == $k){ 
return true; 
}elseif ($k < $array[$mid]){ 
return bin_sch($array, $low, $mid-1, $k); 
}else{ 
return bin_sch($array, $mid+1, $high, $k); 
} 
} 
return false; 
} 
$array=array(3,5,1,8,2,10);
$low=min(3,5,1,8,2,10);
$high=max(3,5,1,8,2,10);
sort($array); // 为数组排序
$k=5;
if(bin_sch($array,$low,$high,$k)){
	echo "查找成功";
}else{
	echo "查找失败";
}
?>
分类: 算法 标签: ,

PHP 截取字符串代码

2009年12月4日 admin 没有评论

1. 截取utf8编码的多字节字符串

1
2
3
4
5
6
7
8
9
<?php  
//截取utf8字符串  
function utf8Substr($str, $from, $len)  
{  
    return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.  
                       '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',  
                       '$1',$str);  
}  
?>

2. 截取GB2312中文字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php   
//截取中文字符串  
function mysubstr($str, $start, $len) {  
    $tmpstr = "";  
    $strlen = $start + $len;  
    for($i = 0; $i < $strlen; $i++) {  
        if(ord(substr($str, $i, 1)) > 0xa0) {  
            $tmpstr .= substr($str, $i, 2);  
            $i++;  
        } else  
            $tmpstr .= substr($str, $i, 1);  
    }  
    return $tmpstr;  
}  
?>

3. UTF-8、GB2312都支持的汉字截取函数

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php  
/*  
Utf-8、gb2312都支持的汉字截取函数  
cut_str(字符串, 截取长度, 开始长度, 编码);  
编码默认为 utf-8  
开始长度默认为 0  
*/   
 
function cut_str($string, $sublen, $start = 0, $code = 'UTF-8')   
{   
    if($code == 'UTF-8')   
    {   
        $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";   
        preg_match_all($pa, $string, $t_string);   
 
        if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";   
        return join('', array_slice($t_string[0], $start, $sublen));   
    }   
    else   
    {   
        $start = $start*2;   
        $sublen = $sublen*2;   
        $strlen = strlen($string);   
        $tmpstr = '';   
 
        for($i=0; $i<$strlen; $i++)   
        {   
            if($i>=$start && $i<($start+$sublen))   
            {   
                if(ord(substr($string, $i, 1))>129)   
                {   
                    $tmpstr.= substr($string, $i, 2);   
                }   
                else   
                {   
                    $tmpstr.= substr($string, $i, 1);   
                }   
            }   
            if(ord(substr($string, $i, 1))>129) $i++;   
        }   
        if(strlen($tmpstr)<$strlen ) $tmpstr.= "...";   
        return $tmpstr;   
    }   
}   
 
$str = "abcd需要截取的字符串";   
echo cut_str($str, 8, 0, 'gb2312');   
?>
分类: PHP 标签: ,

两个个PHP截取小数点的函数

2009年11月4日 admin 没有评论

PHP截取小数点,又分四舍五入和非四舍五入两种情况。

这里涉及两个函数,round(),number_format()。具体用法如下:

number_format

格式化数字字符串。

语法: string number_format(float number, int [decimals], string [dec_point], string [thousands_sep]);

返回值: 字符串

函数种类: 数学运算

内容说明

本函数用来将浮点参数 number 格式化。若没加参数 decimals 则返回的字符串只要整数部份,加了此参数才依参数指定的小数点位数返回。参数 dec_point 表示小数点的表示方式方法,默认值是 “.”,若需要转换成其它的小数点就可以在这个参数改掉。参数 thousands_sep 为整数部份每三位的分隔符号,默认值是 “,”。本函数最特别的地方就是参数数目,最少要有一个,也就是欲格式化的字符串;也可以有二个或者四个参数,但不能用三个参数。注意的是指定小数点的位数之后的数字直接舍弃,没有四舍五入的情形。

round

四舍五入。

语法: double round(double val);

返回值: 倍精确数

函数种类: 数学运算

内容说明

本函数用来将数字小数点后四舍五入。

分类: PHP 标签: ,