php二维数组排序方法.docx
- 文档编号:5404217
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:12
- 大小:17.90KB
php二维数组排序方法.docx
《php二维数组排序方法.docx》由会员分享,可在线阅读,更多相关《php二维数组排序方法.docx(12页珍藏版)》请在冰豆网上搜索。
php二维数组排序方法
php二维数组排序方法
篇一:
php多维数组排序
php多维数组排序
usort—使用用户自定义的比较函数对数组中的值进行排序
说明
boolusort(array&$array,callback$cmp_function)
本函数将用用户自定义的比较函数对一个数组中的值进行排序。
如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。
比较函数必须在第一个参数被认为小于,等于或大于第二个参数时分别返回一个小于,等于或大于零的整数。
注意:
如果两个成员比较结果相同,则它们在排序后的数组中的顺序未经定义。
到php4.0.6之前,用户自定义函数将保留这些单元的原有顺序。
但是由于在4.1.0中引进了新的排序算法,结果将不是这样了,因为对此没有一个有效的解决方案。
注意:
本函数为array中的单元赋予新的键名。
这将删除原有的键名而不仅是重新排序。
如果成功则返回TRue,失败则返回FALse。
使用多维数组的usort()例子
Java代码
1.2.functioncmp($a,$b)
3.{
4.returnstrcmp($a["fruit"],$b["fruit"]);
5.}
6.
7.$fruits[0]["fruit"]="lemons";
8.$fruits[1]["fruit"]="apples";
9.$fruits[2]["fruit"]="grapes";
10.
11.usort($fruits,"cmp");
12.
13.while(list($key,$value)=each($fruits)){
14.echo"/$fruits[$key]:
".$value["fruit"]."/n";
15.}
16.?
>
[java]viewplaincopyprint?
1.2.functioncmp($a,$b)
3.{
4.returnstrcmp($a["fruit"],$b["fruit"]);
5.}
6.
7.$fruits[0]["fruit"]="lemons";
8.$fruits[1]["fruit"]="apples";
9.$fruits[2]["fruit"]="grapes";
10.
11.usort($fruits,"cmp");
12.
13.while(list($key,$value)=each($fruits)){
14.echo"/$fruits[$key]:
".$value["fruit"]."/n";
15.}
16.?
>
当排序多维数组时,$a和$b包含到数组第一个索引的引用。
上例将输出:
$fruits[0]:
apples
$fruits[1]:
grapes
$fruits[2]:
lemons
篇二:
php处理二维数组(去除重复项,排序,转换,去空白等)
php处理二维数组(去除重复项,排序,转换,去空白等)
1.php二维数组去重复项函数
php数组去除重复项有个内置函数array_unique(),但是php的array_unique函数只适用于一维数组,对多维数组并不适用,以下提供一个二维数组的array_unique函数
//二维数组去掉重复值
functionunique_arr($array2D){
foreach($array2Das$v){
$v=join(",",$v);//降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[]=$v;
}
$temp=array_unique($temp);//去掉重复的字符串,也就是重复的一维数组
foreach($tempas$k=>$v){
$temp[$k]=explode(",",$v);//再将拆开的数组重新组装
}
return$temp;
}
2.二维数组的排序方法
一维数组排序方法:
公用函数:
functionprintr($arr)
{
echo'';
print_r($arr);
echo'
';
}
第一组:
sort和rsort,按照php数组键值的顺序asc和逆序desc进行排序,同时破坏原来数组的索引关系——其实是删除索引之后重新建立从0开始的数字索引。
$a=array('a'=>1,2);
sort($a);printr($a);
rsort($a);printr($a);
/*Array
(
[0]=>1
[1]=>2
)
Array
(
[0]=>2
[1]=>1
)
*/
第二组函数:
asort和arsort,这两个函数就比较厉害一点了,只要他们可以保留数组原有的索引关系,把上例的sort和rsort分别用这两个函数替换一下
$a=array('a'=>1,2);
asort($a);printr($a);
arsort($a);printr($a);
/*
Array
(
[a]=>1
[0]=>2
)
Array
(
[0]=>2
[a]=>1
)
*/
第三组php数组排序函数:
krsort和ksort这两个不同于以上两组,这两函数是对键名进行排序的.
$a=array('a'=>1,2);
ksort($a);printr($a);
krsort($a);printr($a);
/*
Array
(
[0]=>2
[a]=>1
)
Array
(
[a]=>1
[0]=>2
)
*/
通过自定义函数对php数组进行排序,有三个函数分别是:
uasort通过自定义函数对php数组的键值进行排序,并且保留原来的索引关系。
uksort通过自定义函数对php数组的键名进行排序,并且保留原来的索引关系。
usort通过自定义函数对php数组的键值进行排序,并且删除原来的索引关系,从零开始建立新的索引。
/**
*@packagebugFree
*@version$Id:
Functionsmain.inc.php,v1.3220XX/09/2411:
38:
37wwccssexp$
*
*
*sortantwo-dimensionarraybysomeleveltwoitemsusearray_multisort()function.
*
*syssortArray($Array,"Key1","soRT_Asc","soRT_ReTuLAR","Key2"……)
*@authorchunshengwang
*@paramarray$ArrayDatathearraytosort.
*@paramstring$Keyname1thefirstitemtosortby.
*@paramstring$sortorder1theordertosortby("soRT_Asc"|"soRT_Desc")
*@paramstring$sortType1thesorttype("soRT_ReguLAR"|"soRT_numeRIc"|"soRT_sTRIng")*@returnarraysortedarray.
*/
functionsyssortArray($ArrayData,$Keyname1,$sortorder1="soRT_Asc",$sortType1=
"soRT_ReguLAR")
{
if(!
is_array($ArrayData))
{
return$ArrayData;
}
//getargsnumber.
$Argcount=func_num_args();
//getkeystosortbyandputthemtosortRulearray.
for($I=1;$I{
$Arg=func_get_arg($I);
if(!
eregi("soRT",$Arg))
{
$KeynameList[]=$Arg;
$sortRule[]='$'.$Arg;
}
else
{
$sortRule[]=$Arg;
}
}
//getthevaluesaccordingtothekeysandputthemtoarray.
foreach($ArrayDataAs$Key=>$Info)
{
foreach($KeynameListAs$Keyname)
{
${$Keyname}[$Key]=$Info[$Keyname];
}
}
//createtheevalstringandevalit.
$evalstring='array_multisort('.join(",",$sortRule).',$ArrayData);';eval($evalstring);
return$ArrayData;
}
实例:
//#################示例#################
$arr=array(
array(
'name'=>'学习',
'size'=>'1235',
'type'=>'jpe',
'time'=>'1921-11-13',
'class'=>'dd',
),
array(
'name'=>'中国功夫',
'size'=>'153',
'type'=>'jpe',
'time'=>'20XX-11-13',
'class'=>'jj',
),
array(
'name'=>'编程',
'size'=>'35',
'type'=>'gif',
'time'=>'1997-11-13',
'class'=>'dd',
),
array(
'name'=>'中国功夫',
'size'=>'65',
'type'=>'jpe',
'time'=>'1925-02-13',
'class'=>'yy',
篇三:
php数组排序与查找详解(传智播客听课笔记韩顺平老师)
?
数组的排序
这里我们介绍一些常用的排序方法,排序是一个程序员的基本功
1.冒泡法
2.选择排序法
3.插入排序法
4.快速排序法
基本概念:
是将一组数据,按照某个顺序排列的过程
排序分两大类:
1.内部排序法以上方法都属于内部排序法
2.外部排序法因为数据量大,必须借助外部排序法
?
冒泡排序法
//简单的排序
$arr=array(0,5,-1);
$temp=0;
//我们要把数组从小到大排序
for($i=0;$i{
for($j=0;$j{
if($arr[$j]>$arr[$j+1])
{
$temp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
}
}
}
print_r($arr);
//封装成函数,利于以后使用
functionbubblesort($arr)
{
$temp=0;
//我们要把数组从小到大排序
for($i=0;$i{
for($j=0;$j{
if($arr[$j]>$arr[$j+1])
{
$temp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
}
}
}
return$arr;
}
$arr=array(0,5,-1);
$bubbleArray=bubblesort($arr);
print_r($bubbleArray);
?
>
?
选择排序法
///选择排序法
functionselectsort(&$arr)
{
$temp=0;
for($i=0;$i{
//假设$i是最小的数
$minVal=$arr[$i];
//记录我认为的最小数的下标
$minIndex=$i;
for($j=$i+1;$j{
?
}}//说明我们认为的最小值不是最小值if($minVal>$arr[$j]){$minVal=$arr[$j];$minIndex=$j;}}//最后交换$temp=$arr[$i];$arr[$i]=$arr[$minIndex];$arr[$minIndex]=$temp;插入排序法//插入排序法functioninsertsort(&$arr){$newarr=array();$newarr[0]=$arr[0];//先默认下标为0这个数已经是有for($i=1;$i=0;$j--){if($newarr[$j]>$arr[$i]){$temp=$newarr[$j];$newarr[$j]=$arr[$i];$newarr[$j+1]=$temp;}else{$newarr[$j+1]=$arr[$i];break;}}}$arr=$newarr;
}
$arr=array(3,8,-10,10,4,7,9,4);
insertsort($arr);
print_r($arr);
从效率上看:
冒泡法《选择排序法《插入排序法
?
查找详解
介绍两种方法:
1.顺序查找
对某个数组,按照顺序一个一个的比较,然后找到你要的数据
案例:
要求从一个数组$arr=array(46,90,900,-1)中查找一个数34,如果查找则输出该数的下标,如果找不到则输出查无此数
$arr=array(46,90,900,0,-1,-1);
functionsecrch(&$arr,$findVal)
{
$flag=false;
for($i=0;$i{
if($findVal==$arr[$i])
{
echo"找到了,下标为=$i";
$flag=true;
break;
}
}
if(!
$flag)
{
echo"查询不到";
}
}
secrch($arr,-1);
2.二分查找法
所谓二分查找,它有一个重要的前提,该数组本身已经是一个有序数组,如果该数组不是有序的,则必须先排序再查找
//二分查找函数
functionbinarysearch(&$arr,$findVal,$leftIndex,$rightIndex)
{
if($rightIndex{
echo"找不到该数。
";
return;
}
$middleIndex=round(($leftIndex+$rightIndex)/2);
if($findVal>$arr[$middleIndex])
{
binarysearch($arr,$findVal,$middleIndex+1,$rightIndex);
}elseif($findVal{
binarysearch($arr,$findVal,$leftIndex,$middleIndex-1);
}else
{
echo"找到这个数,下标是:
$middleIndex";
}
}
$arr=array(-1,-1,3,9,46,90,900);
binarysearch($arr,900,0,count($arr)-1);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- php 二维 数组 排序 方法
![提示](https://static.bdocx.com/images/bang_tan.gif)