怎么给多维数组排序?
一个二维数组:  
 
           $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  分分别用了整数,浮点数和字符串来表示,可以在程序输出中清楚地看到它们排序的结果。
AddThis Social Bookmark Button

相关文档(Relevant Entries)
几个值得关注的PHP MVC Framework
在mysql中求日期差
简单的PHP重定向代码
Andreessen: PHP succeeding where Java isn't
PHPLIB模板嵌套示例
用Zend Encode编写开发PHP程序
如何编译PHP源代码
Zend Optimizer 配置指南
Posted on August 11, 2006 11:10 AM | | | | TrackBacks (0)

引用地址(TRACKBACKS)
 
TrackBack URL for this entry:
http://www.wujianrong.com/mt-tb.cgi/3684

发布评论(ADD YOUR COMMENTS)
 
感谢您参与评论;发表您的意见时请保持文章的相关性;不相关的或是单纯宣传的内容可能会被删掉。您的E-mail只是用来确认您发表的文章,不会出现在网页上。
Please keep your comments relevant to this blog entry. Email addresses are never displayed, but they are required to confirm your comments.

称呼(Name):      记住我的个人信息(Remember)
邮箱(Email):
网址(URL):
评论(Add your comments):

相关内容