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);

本文来源:https://www.bwwdw.com/article/qa0b.html

Top