php二维数组排序方法
更新时间:2024-02-09 06:17:01 阅读量: 经典范文大全 文档下载
篇一:PHP多维数组排序
PHP多维数组排序
usort — 使用用户自定义的比较函数对数组中的值进行排序
说明
bool usort ( array &$array, callback $cmp_function )
本函数将用用户自定义的比较函数对一个数组中的值进行排序。如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。
比较函数必须在第一个参数被认为小于,等于或大于第二个参数时分别返回一个小于,等于或大于零的整数。
注意: 如果两个成员比较结果相同,则它们在排序后的数组中的顺序未经定义。到 PHP 4.0.6 之前,用户自定义函数将保留这些单元的原有顺序。但是由于在 4.1.0 中引进了新的排序算法,结果将不是这样了,因为对此没有一个有效的解决方案。
注意: 本函数为 array 中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。
如果成功则返回 TRUE,失败则返回 FALSE。
使用多维数组的 usort() 例子
Java代码
1. <?php
2. function cmp($a, $b)
3. {
4. return strcmp($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] view plaincopyprint?
1.<?php
2.function cmp($a, $b)
3.{
4. return strcmp($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函数
//二维数组去掉重复值
function unique_arr($array2D){
foreach ($array2D as $v){
$v = join(",",$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[] = $v;
}
$temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $v){
$temp[$k] = explode(",",$v);//再将拆开的数组重新组装
}
return $temp;
}
2. 二维数组的排序方法
一维数组排序方法:
公用函数:
function printr($arr)
{
echo '<pre>';
print_r($arr);
echo '</pre><br>';
}
第一组 :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数组的键值进行排序,并且删除原来的索引关系,从零开始建立新的索引。 /**
* @package BugFree
* @version $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $
*
*
* Sort an two-dimension array by some level two items use array_multisort() function.
*
* sysSortArray($Array,"Key1","SORT_ASC","SORT_RETULAR","Key2"……)
* @author Chunsheng Wang <>
* @param array$ArrayDatathe array to sort.
* @param string $KeyName1 the first item to sort by.
* @param string $SortOrder1 the order to sort by("SORT_ASC"|"SORT_DESC")
* @param string $SortType1the sort type("SORT_REGULAR"|"SORT_NUMERIC"|"SORT_STRING") * @return array sorted array.
*/
function sysSortArray($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 =
"SORT_REGULAR")
{
if(!is_array($ArrayData))
{
return $ArrayData;
}
// Get args number.
$ArgCount = func_num_args();
// Get keys to sort by and put them to SortRule array.
for($I = 1;$I < $ArgCount;$I ++)
{
$Arg = func_get_arg($I);
if(!eregi("SORT",$Arg))
{
$KeyNameList[] = $Arg;
$SortRule[] = '$'.$Arg;
}
else
{
$SortRule[] = $Arg;
}
}
// Get the values according to the keys and put them to array.
foreach($ArrayData AS $Key => $Info)
{
foreach($KeyNameList AS $KeyName)
{
${$KeyName}[$Key] = $Info[$KeyName];
}
}
// Create the eval string and eval it.
$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' => '2005-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. 外部排序法 因为数据量大,必须借助外部排序法
? 冒泡排序法
<?php
//简单的排序
$arr=array(0,5,-1);
$temp=0;
//我们要把数组从小到大排序
for($i=0;$i<count($arr)-1;$i++)
{
for($j=0;$j<count($arr)-1-$i;$j++)
{
if($arr[$j]>$arr[$j+1])
{
$temp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
}
}
}
print_r($arr);
//封装成函数,利于以后使用
<?php
function bubbleSort($arr)
{
$temp=0;
//我们要把数组从小到大排序
for($i=0;$i<count($arr)-1;$i++)
{
for($j=0;$j<count($arr)-1-$i;$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);
?>
? 选择排序法
///选择排序法
function selectSort(&$arr)
{
$temp=0;
for($i=0;$i<count($arr)-1;$i++)
{
//假设$i是最小的数
$minVal=$arr[$i];
//记录我认为的最小数的下标
$minIndex=$i;
for($j=$i+1;$j<count($arr);$j++)
{
?
} } //说明我们认为的最小值不是最小值 if($minVal>$arr[$j]) {$minVal=$arr[$j];$minIndex=$j; } } //最后交换 $temp=$arr[$i]; $arr[$i]=$arr[$minIndex]; $arr[$minIndex]=$temp; 插入排序法 //插入排序法 function insertSort(&$arr) { $newarr=array(); $newarr[0]=$arr[0]; //先默认下标为0这个数已经是有 for($i=1;$i<count($arr);$i++) {for($j=$i-1;$j>=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);
function secrch(&$arr,$findVal)
{
$flag=false;
for($i=0;$i<count($arr);$i++)
{
if($findVal==$arr[$i])
{
echo "找到了,下标为=$i";
$flag=true;
break;
}
}
if(!$flag)
{
echo "查询不到";
}
}
secrch($arr,-1);
2. 二分查找法
所谓二分查找,它有一个重要的前提,该数组本身已经是一个有序数组,如果该数组不是有序的,则必须先排序再查找
//二分查找函数
function binarySearch(&$arr,$findVal,$leftIndex,$rightIndex)
{
if($rightIndex<$leftIndex)
{
echo "找不到该数。";
return;
}
$middleIndex=round(($leftIndex+$rightIndex)/2);
if($findVal>$arr[$middleIndex])
{
binarySearch($arr,$findVal,$middleIndex+1,$rightIndex);
}elseif($findVal<$arr[$middleIndex])
{
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);
正在阅读:
php二维数组排序方法02-09
+汇总:建筑CAD测试题及答案 - 图文11-08
判决反馈均衡器结构及LMS算法研究08-12
粘土含量和粘土改性对木薯淀粉高岭土复合膜性能的影响05-07
机械原理复习题03-14
那温柔的眼光作文700字07-08
为梦想装上翅膀作文07-15
植物学实验十:被子植物和花06-05
行政法的概念和基本原则02-16
- 关于实施新冠肺炎疫情精准防控的指导意见
- 学生党员在疫情期间做出的思想汇报
- 《深度工作》读书感悟
- 抗"疫"期间思想汇报5篇
- 学校承诺书|面对疫情,我们承诺
- 公司战“疫”感悟_我想和你们在一起
- 国培送教下乡培训感悟总结
- 只盼“樱花”早盛开,烂漫如当年
- 疫情防控工作感悟
- 关于疫情的几点思考及感悟
- 读蒋廷黻《中国近代史》有感
- 党小组长培训资料汇
- 2019年度副镇长述职述德述廉报告
- 疫情期间教师直播感悟
- 新型冠状病毒肺炎疫情防控心得体会4篇
- 在书记抓党建工作述职评议大会上的讲话
- 《老师请回答》观后感
- 2020年党组织书记党建工作考核办法
- 在疫情防控暨企业复工复产工作会议上的讲话
- 企业疫期复工管理方式与措施
- 二维
- 数组
- 排序
- 方法
- php