ITPub博客

首页 > 应用开发 > IT综合 > php演绎(2)——数组的排序 (转)

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

原创 IT综合 作者:amyz 时间:2007-08-15 16:32:33 0 删除 编辑
php演绎(2)——数组的排序 (转)[@more@]第二节 数组的排序

数组的排序是个让人很头痛的问题,光是各种名目的排序法就让人晕晕的了,不过它是如此的重要,以至于我们不能不重点讨论它。好在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 );


程序运行的效果图如下:
2003-6-61815421.gif" border=0>
上边的例子之所以能够得到解决是因为我们预先按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
/** ************************************************************
* 一个多维数组排序的例子
* @ Easy@bjpeu.edu.cn
* @ 2003-6-6
** *************************************************************/ 

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

echo '








'; 
for ( $i = 0 ; $i < count( $userArray["id"] ) ; $i++ ) 
{ 
echo '







'; 

} 
echo '
序号 IP 日期 时间 语言 引用页
' . $userArray["id"][$i] . ' ' . $userArray["ip"][$i] . ' ' . $userArray["date"][$i] . ' ' . $userArray["time"][$i] . ' ' . $userArray["language"][$i] . ' ' . $userArray["reference"][$i] . '
'; 
} 

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内部使用多维数组来实现的。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10752019/viewspace-958710/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    3982
  • 访问量
    7896280