php演绎(2)——数组的排序

原创 2003年06月16日 17:04:00
第二节 数组的排序

数组的排序是个让人很头痛的问题,光是各种名目的排序法就让人晕晕的了,不过它是如此的重要,以至于我们不能不重点讨论它。好在PHP已经提供了很多排序的函数,让你可以不去了解这些排序的细节。排序的原理和效率比较,我们会在后边的章节专门讨论。

PHP里最一般的排序函数是sort(),PHP手册里对它的描述如下:
Sort
(PHP 3, PHP 4 )

sort -- 对数组排序
说明
void sort ( array array [, int sort_flags])
本函数对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排。


使用sort()将把原有数组按照ASCII码从小到大顺序重新排列,注意sort()是直接对数组操作,并不返回任何值。现在,让我们回到麻将上:),majiangArray的数组元素是这样的:花色_点数.gif,我们需要进行的排序是这样的:先按照花色将maijiangArray数组排序,而每个花色内部,依照点数大小排序。显然,上边的sort()函数正好符合这一要求。我们只要在showArray之前sort()一下就OK了。
PHP CODE
// 在showArray之前sort()
sort( $user1 );
sort( $user2 );
sort( $user3 );
sort( $user4 );

showArray( $user1 );
showArray( $user2 );
showArray( $user3 );
showArray( $user4 );


程序运行的效果图如下:

上边的例子之所以能够得到解决是因为我们预先按sort()的习惯来组织了元素的内容,将主要排序标准——花色放在前边,而将次要排序标准——点数放在后边,而分割它们的都是一样的符号“_”。如果有元素为10_10.gif,那么现有的次序将被打乱;而且依靠重组元素名的方法来实现排序始终有些不方便。这说明单纯的排序实际上并不实用,因为我们通常都是依照数组元素的某一个特性对数组进行排序。在实际应用中,我们通过多维数组来存放有多个属性的数组元素。举个例子很常见的例子,我们使用user_info这个数组来存放访问者的信息,访问者id、访问者的IP、访问日期和时间、语言和引用页分别被保存在user_info[“id”],user_info[“ip”],user_info[“date”],user_info[“time”],user_info[“language”]和user_info[“reference”]里边。如果我们需要根据访问时间来对user_ info数组排序,sort()就英雄无用武之地了。幸运的是PHP中提供了一个用于多维数组排序的函数array_multisort(),它可以根据多维数组的某元素的一个属性对多维数组进行排序。下面我们通过程序来看看它的作用。

PHP CODE
<?php 
/** ************************************************************
* 一个多维数组排序的例子
* @ Easy@bjpeu.edu.cn
* @ 2003-6-6
** *************************************************************/ 

// 显示函数,用表格的形式显示数组内容
function showUser$userArray 


echo 
'<table border="1" cellpadding="0" cellspacing="5" style="border-collapse: collapse" bordercolor="#111111" width="100%" style="{ color: #000000; font-size: 9pt; font-family: Verdana }" >
<tr>
<td width="4%"><span lang="zh-cn">序号</span></td>
<td width="14%">IP</td>
<td width="17%"><span lang="zh-cn">日期</span></td>
<td width="16%"><span lang="zh-cn">时间</span></td>
<td width="14%"><span lang="zh-cn">语言</span></td>
<td width="35%"><span lang="zh-cn">引用页</span></td>
</tr>
'

for ( 
$i $i count$userArray["id"] ) ; $i++ ) 

echo 
'<tr>
<td width="4%">' 
$userArray["id"][$i] . '</td>
<td width="14%">' 
$userArray["ip"][$i] . '</td>
<td width="17%">' 
$userArray["date"][$i] . '</td>
<td width="16%">' 
$userArray["time"][$i] . '</td>
<td width="14%">' 
$userArray["language"][$i] . '</td>
<td width="35%">' 
$userArray["reference"][$i] . '</td>
</tr>
'



echo 
'</table>'


unset(
$user_info); 
// 开始存储用户信息
// 第一个
$user_info["id"][] = 1
$user_info["ip"][] = '202.204.203.7'
$user_info["date"][] = '06-07-2002'
$user_info["time"][] = '20:24'
$user_info["language"][] = 'zh-cn'
$user_info["reference"][] = 'http://exlc.soft.com/es5'
// 第二个
$user_info["id"][] = 2
$user_info["ip"][] = '202.204.203.8'
$user_info["date"][] = '06-08-2002'
$user_info["time"][] = '04:32'
$user_info["language"][] = 'zh-cn'
$user_info["reference"][] = 'http://exlc.soft.com/es5'
// 第三个
$user_info["id"][] = 3
$user_info["ip"][] = '202.204.203.9'
$user_info["date"][] = '06-09-2002'
$user_info["time"][] = '05:12'
$user_info["language"][] = 'zh-cn'
$user_info["reference"][] = 'http://exlc.soft.com/es5'

// 以时间为索引对数组排序
array_multisort 
$user_info["time"], SORT_STRING SORT_ASC
$user_info["id"],// 需要与时间保持关联的属性项写到后边
$user_info["ip"], 
$user_info["date"], 
$user_info["language"], 
$user_info["reference"
); 

showUser$user_info );//看看结果
?> 


排序的结果如下:


多维数组是实现PHP文本数据库的重要手段,下一节我们将尝试编写一个class来封装对文本数据表的操作,当然,class内部使用多维数组来实现的。

php 数组排序以及按照某个字段排序,主要mark usort的

转自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/11/2207494.html,主要是看里面的usort的。 ...
  • csCrazybing
  • csCrazybing
  • 2016年06月21日 13:31
  • 2410

PHP常用一维数组排序

  • lz0426001
  • lz0426001
  • 2014年11月25日 17:09
  • 460

PHP实现归并排序(合并排序)--算法原理分析

归并排序:时间复杂度为~O(nlogn)—又称合并排序 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个有序的子序列,再把有序的子序列合并为整体有序序...
  • dalaoadalaoa
  • dalaoadalaoa
  • 2015年10月18日 17:56
  • 3229

PHP实现对多维数组按照某个键值排序的两种解决方法

实现对多维数组按照某个键值排序的两种解决方法(array_multisort和array_sort):第一种:array_multisort()函数对多个数组或多维数组进行排序。 温馨提醒:由上图可知...
  • wuchengzeng
  • wuchengzeng
  • 2014年01月27日 21:54
  • 13074

PHP 二维数组根据某个字段排序

本文记录的要实现的功能类似于 MySQL 中的  ORDER BY,上个项目中有遇到这样的一个需求。 要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据...
  • liruxing1715
  • liruxing1715
  • 2014年06月03日 15:37
  • 48523

PHP多维数组指定多字段排序

PHP多维数组指定多字段排序介绍array_multisort方法 array_multisort — 对多个数组或多维数组进行排序.其php 手册中的说明如下:bool array...
  • u011348776
  • u011348776
  • 2016年10月14日 18:35
  • 5823

PHP开发小技巧②—实现二维数组根据key进行排序

在PHP中内置了很多对数组进行处理的函数,有很多时候我们直接使用其内置函数就能达到我们的需求,得到我们所想要的结果;但是,有的时候我们却不能通过使用内置函数实现我们的要求,这就需要我们自己去编写算法来...
  • Zhihua_W
  • Zhihua_W
  • 2016年11月26日 14:58
  • 438

PHP 对一个给定的二维数组按照指定的键值进行排序

  • kaylio
  • kaylio
  • 2015年01月15日 09:51
  • 1421

【php】二维数组按指定的键名排序

/*二维数组按指定的键值排序*/ function array_sort($array,$keys,$type='asc'){ if(!isset($array) || !is_array($arr...
  • yanhui_wei
  • yanhui_wei
  • 2013年02月06日 18:43
  • 1165

PHP数组排序array_multisort函数详解

PHP中array_multisort函数对多个数组或多维数组进行排序,参数数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中...
  • zhu_xiao_yuan
  • zhu_xiao_yuan
  • 2016年11月20日 16:17
  • 1870
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:php演绎(2)——数组的排序
举报原因:
原因补充:

(最多只允许输入30个字)