| 域名空间 下载中心 社区论坛 信息公告 my小屋 |
![]() |
联系我们 设为首页 加入收藏 |
|
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿 论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图 专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版 社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务 |
| 新版上线![旧版] | |||||
注:打开慢时请稍等
怎么给多维数组排序?http://www.iyit.net 日期:2006-10-6 15:36:38 来源:iyit.net收集 点击: |
汗,对数组操作太弱了,资料到处翻,还是只有一维数组的方便排序方法,却找不到二维的. matlab用久了才知道php对数的操作很弱.-_-!! 一个二维数组: $aclass[0]["acid"] = 1; $aclass[0]["acorder"] = 3; $aclass[0]["acname"] = "入门指南"; $aclass[0]["acinfo"] = "php基础知识"; $aclass[1]["acid"] = 2; $aclass[1]["acorder"] = 1; $aclass[1]["acname"] = "应用技巧"; $aclass[1]["acinfo"] = "php编程技巧总结"; $aclass[2]["acid"] = 3; $aclass[2]["acorder"] = 2; $aclass[2]["acname"] = "高级应用"; $aclass[2]["acinfo"] = "php程序的高级应用"; 问题一: 问题很简单,怎么按照acorder升序和降序来排列这几个数组,值不变索引不变. print_r的结果应该是: array ( [0] => array ( [acid] => 2 [acorder] => 1 [acname] => 应用技巧 [acinfo] => php编程技巧总结 ) [1] => array ( [acid] => 3 [acorder] => 2 [acname] => 高级应用 [acinfo] => php程序的高级应用 ) [2] => array ( [acid] => 1 [acorder] => 3 [acname] => 入门指南 [acinfo] => php基础知识 ) } 有没有其它详细的排序方案?自定义的多维数组排序怎么做?给个资料参考也行,我喜欢自己看书理解. 问题二: 如何取得[acid] => 1的那个数组的全部或部分元素?比如我要取得[acid] => 1的那个数组[acname] 索引所指向的值,怎么做简单效率高? 两个问题100分,晚上回来结帖子,郁闷,今天访问老出错.可用分竟然不增加,昏死. --------------------------------------------------------------- <?php $aclass[0]["acid"] = 1; $aclass[0]["acorder"] = 3; $aclass[0]["acname"] = "入门指南"; $aclass[0]["acinfo"] = "php基础知识"; $aclass[1]["acid"] = 2; $aclass[1]["acorder"] = 1; $aclass[1]["acname"] = "应用技巧"; $aclass[1]["acinfo"] = "php编程技巧总结"; $aclass[2]["acid"] = 3; $aclass[2]["acorder"] = 2; $aclass[2]["acname"] = "高级应用"; $aclass[2]["acinfo"] = "php程序的高级应用"; //升序 $asc_func = create_function('$a,$b',' $k = "acorder"; if($a[$k] == $b[$k]) return 0; return $a[$k]>$b[$k]?1:-1; '); usort($aclass,$asc_func); print_r($aclass); // 降序 $desc_func = create_function('$a,$b',' $k = "acorder"; if($a[$k] == $b[$k]) return 0; return $a[$k]>$b[$k]?-1:1; '); usort($aclass,$desc_func); print_r($aclass); ?> array ( [0] => array ( [acid] => 2 [acorder] => 1 [acname] => 应用技巧 [acinfo] => php编程技巧总结 ) [1] => array ( [acid] => 3 [acorder] => 2 [acname] => 高级应用 [acinfo] => php程序的高级应用 ) [2] => array ( [acid] => 1 [acorder] => 3 [acname] => 入门指南 [acinfo] => php基础知识 ) ) array ( [0] => array ( [acid] => 1 [acorder] => 3 [acname] => 入门指南 [acinfo] => php基础知识 ) [1] => array ( [acid] => 3 [acorder] => 2 [acname] => 高级应用 [acinfo] => php程序的高级应用 ) [2] => array ( [acid] => 2 [acorder] => 1 [acname] => 应用技巧 [acinfo] => php编程技巧总结 ) ) --------------------------------------------------------------- array_multisort (php 4 ) array_multisort -- 对多个数组或多维数组进行排序 说明 bool array_multisort ( array ar1 [, mixed arg [, mixed ... [, array ...]]]) array_multisort() 可以用来一次对多个数组进行排序或者根据某一维对多维数组进行排序。排序时保留原有的键名关联。 输入数组被当成一个表的列并以行来排序 - 这类似于 sql 的 order by 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。 本函数的参数结构有些不同寻常,但是非常灵活。第一个参数必须是一个数组。接下来的每个参数可以是数组或者是下面列出的排序标志。 排序顺序标志: sort_asc - 按照上升顺序排序 sort_desc - 按照下降顺序排序 排序类型标志: sort_regular - 将项目按照通常方法比较 sort_numeric - 将项目按照数值比较 sort_string - 将项目按照字符串比较 每个数组之后不能指定两个同类的排序标志。每个数组后指定的排序标志仅对该数组有效 - 在此之前为默认值 sort_asc 和 sort_regular。 如果成功则返回 true,失败则返回 false。 例子 1. 对多个数组排序 $ar1 = array ("10", 100, 100, "a"); $ar2 = array (1, 3, "2", 1); array_multisort ($ar1, $ar2); 本例中经过排序后,第一个数组将包含 10,"a",100,100。第二个数组将包含 1,1,"2",3。第二个数组中的项目顺序完全和第一个数组中相应的项目(100 和 100)顺序一致。 例子 2. 对多维数组排序 $ar = array (array ("10", 100, 100, "a"), array (1, 3, "2", 1)); array_multisort ($ar[0], sort_asc, sort_string, $ar[1], sort_numeric, sort_desc); 本例中经过排序后,第一个数组将包含 10,100,100,"a"(作为字符串上升排序),第二个数组将包含 1,3,"2",1(作为数值下降排序)。 【译者注】本函数相当有用,为有助于理解,请看下面这个例子: 例子 3. 名次排列 $grade = array("score" => array(70, 95, 70.0, 60, "70"), "name" => array("zhang san", "li si", "wang wu", "zhao liu", "liu qi")); array_multisort($grade["score"], sort_numeric, sort_desc, // 将分数作为数值,由高到低排序 $grade["name"], sort_string, sort_asc); // 将名字作为字符串,由小到大排序 var_dump($grade); 上例输出结果如下: array(2) { ["score"]=> array(5) { [0]=> int(95) [1]=> string(2) "70" [2]=> float(70) [3]=> int(70) [4]=> int(60) } ["name"]=> array(5) { [0]=> string(5) "li si" [1]=> string(6) "liu qi" [2]=> string(7) "wang wu" [3]=> string(9) "zhang san" [4]=> string(8) "zhao liu" } } 本例中对包含成绩的数组 $grade 按照分数(score)由高到低进行排序,分数相同的人则按照名字(name)由小到大排序。排序后李四 95 分为第一名,赵六 60 分为第五名没有异议。张三、王五和刘七都是 70 分,他们的名次则由其姓名的字母顺序排列,liu 在前,wang 在后而 zhang 在最后。为了区别,三个 70 分分别用了整数,浮点数和字符串来表示,可以在程序输出中清楚地看到它们排序的结果。 --------------------------------------------------------------- up学习、 --------------------------------------------------------------- 好东西,收藏 编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部] 上一篇:用gd图形库写了个验证码,可是(急。。。) 下一篇:讨论:几个效率等问题和众兄弟探讨 转载请注明来源:www.iyit.net 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
| 相关文章 | ||||
| 设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| |||||||