志达IT
做快乐程序员

php序列化(php排序算法)

php序列化

cookie无法存储复合形式的数据,所以需要序列化一个多维数组存入cookie,可是由于php版别太低(5.2),不支撑json_encode
处理(序列化与反序列化):
1,serialize和unserialize函数:只支撑一维数组,听说对目标的支撑比较好,json_encode是不支撑目标的
所有PHP里边的值都能够运用serialize()函数将其转换为一个能够存储的字符串,也便是序列化。而unserialize()函数能够重新把字符串变回PHP本来的值,也便是反序列化。
以目标为例,当序列化一个目标时,将会保存目标的所有变量,可是不会保存目标的办法,只会保存类的名字。别的,为了能够反序列化一个目标,这个目标的类必须现已界说过。假如序列化类A的一个目标,将会返回一个跟类A相关,而且包含了目标所有变量值的字符串。
假如要想在别的一个文件中反序列化一个目标,那么这个目标的类必须在反序列化之前界说,能够经过包含一个界说该类的文件或运用函数spl_autoload_register()来实现。
serialize()函数的语法格式如下:
serialize(mixed$value)
其中$value便是要序列化的变量。
serialize()函数能够处理除了resource(资源)之外的任何类型。当序列化目标时,PHP会在序列动作之前调用该目标的__sleep()成员函数。这样就答应目标在被序列化之前做任何铲除操作。相似的,当运用unserialize()反序列化目标时,将调用__wakeup()成员函数。php
当运用serialize()函数将目标序列化后,能够将这个得到的字符串保存到文件或者数据库中,然后在需要的地方运用unserialize()函数将这个字符串反序列化。
2,base64_encode和base64_decode,同样的问题,不支撑多维,假如用它的话,base64编码将添加字符串的长度。为了战胜这个问题,能够和gzcompress一同运用:
functionmy_serialize($obj)
{
returnbase64_encode(gzcompress(serialize($obj)));
}
//反序列化
functionmy_unserialize($txt)
{
returnunserialize(gzuncompress(base64_decode($txt)));
}
3.var_export和eval
$look_books=array($aid=>array($cid=>array(‘article_name’=>$article->articlename,’chapter_name’=>$chapter->chaptername)))+$look_books;
$look_books=var_export($look_books,true);
setcookie(‘look_books’,$look_books,$cookieTime,’/’,’.dym.com’);
支撑多维数组,可是需要留意单双引号会有转义符,导致eval失利,需要把转义符去掉
1
stripcslashes()即可。
4.wddx_serialize_value和wddxdeserialize
$a=array(‘a’=>’Apple’,’b’=>’banana’,’c’=>’Coconut’);
//序列化数组
$s=wddx_serialize_value($a);
echo$s;
//输出成果(检查输出字符串的源码):ApplebananaCoconut
echo’
‘;
//反序列化
$o=wddx_deserialize($s);
print_r($o);
//输出成果:Array([a]=>Apple[b]=>banana1=>Coconut)
这种方式xml自身的标签占用字符过多,比较占用内存

php排序算法

选择排序
原理:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的开始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到悉数待排序的数据元素的个数为零。
functionselectSort($arr){
$len=count($arr);for($i=0;$i<$len;$i++){
$minIndex=$i;for($j=$i+1;$j<$len;$j++){if($arr[$j]<$arr[$minIndex]){
$minIndex=$j;
}
}//假如选出的索引和当时的最小数索引不一致,互换if($minIndex!=$i){
$t=$arr[$i];
$arr[$i]=$arr[$minindex];
$arr[$minindex]=$t;
}
}return$arr;
}
刺进排序
原理:每步将一个待排序的记录,按其关键码值的大小刺进前面现已排序的文件中适当位置上,直到悉数刺进完停止。
functioninsertSort($arr){
$len=count($arr);for($i=1;$i<$len;$i++){
$tmp=$arr[$i];for($j=$i-1;$j>=0;$j–){if($tmp<$arr[$j]){
$arr[$j+1]=$arr[$j];
$arr[$j]=$tmp;
}else{break;
}
}
}return$arr;
}
快速排序
原理:通过一趟排序即将排序的数据分割成独立的两部分,其中一部分的一切数据都比另外一部分的一切数据都要小,然后再按此办法对这两部分数据别离进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
functionquickSort($arr){
$len=count($arr);if($len<=1){return$arr;
}//记录第一个元素$x=$arr[0];//记录小元素调集$min=array();//记录大元素调集$max=array();for($i=1;$i<$len;$i++){if($arr[$i]<=$x){
$min[]=$arr[$i];
}if($arr[$i]>$x){
$max[]=$arr[$i];php
}
}
$min=quickSort($min);
$max=quickSort($max);
$result=array_merge($min,array($x),$max);return$result;
}
冒泡排序
原理:比较相邻的元素。假如第一个比第二个大,就交流他们两个。
仿制代码
functionbubbleSort($arr)
{
$len=count($arr);for($i=1;$i<$len;$i++){for($j=0;$j<$len-$i;$j++){if($arr[$j]>$arr[$j+1]){
$tmp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$tmp;
}
}
}return$arr;
}

赞(0)
未经允许不得转载:志达IT网站 » php序列化(php排序算法)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

志达IT网站 每天分享编程和互联网的IT技术博客

登录/注册联系我们