<?php
$ar = array(
"aa|aad|123|afas",
"aa|aad|13|afas",
"aa|aad|23|afas",
"aa|aad|12|afas",
"aa|aad|1|afas",
"aa|aad|2|afas"
);
function cmd($a,$b) {
  $a1 = explode("|",$a);
  $b1 = explode("|",$b);
  if($a1[2] == $b1[2])
    return 0;
  return ($a1[2]>$b1[2])?1:-1;
}
usort($ar,cmd);
?>
结果
Array
(
    [0] => aa|aad|1|afas
    [1] => aa|aad|2|afas
    [2] => aa|aad|12|afas
    [3] => aa|aad|13|afas
    [4] => aa|aad|23|afas
    [5] => aa|aad|123|afas
)

解决方案 »

  1.   

    现在才发现原来那个数组还有些出入:
    aa|aad|adf,123|afas
    ad|aad|adfa,13|afas
    ba|aad|aaaaafs,23|afas
    aa|aad|afafa,12|afas
    aa|aad|afaf,1|afas
    aa|aad|adfadf,2|afas
    ……
    这个怎么排?
      

  2.   

    回调函数改成:
    function cmd($a,$b) {
      $a1 = split("[|,]",$a);
      $b1 = split("[|,]",$b);
      if($a1[3] == $b1[3])
        return 0;
      return ($a1[2]>$b1[2])?1:-1;
    }至于排序后数组的变化是由usort函数决定的
      

  3.   

    function cmd($a,$b) {
      $a1 = explode("|",$a);
      $b1 = explode("|",$b);
      $a2 = explode(",",$a1[2]);
      $b2 = explode(",",$b1[2]);
      if($a2[1] == $b2[1])
        return 0;
      return ($a2[2]>$b2[2])?1:-1;
    }
    可不可以?
      

  4.   

    看看这个或许对你有帮助。
    它只不过是从文件下面的多个文件里面获取数据罢了!
    格式跟你要求的也是一样的。
    <?
    if (empty($sorted)) $sorted="musicname";
    if (empty($dir)) $dir=1;
    ?><HTML><HEAD>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <TITLE>歌曲列表</TITLE>
    <style TYPE="text/css">
    <!-- 
    body,td{  font-family: "宋体"; line-height: 12pt; font-size: 9pt}
    a{TEXT-DECORATION: none;}
     -->
    </style>
    </HEAD>
    <BODY>
    <script language="javascript">
    sorted="<?echo $sorted;?>";
    dir=parseInt("<?echo $dir;?>");function sortby(obj){
      sorted==obj.ename ? mydir=-dir : mydir=dir;
      obj.href=location.pathname+"?sorted="+obj.ename+"&dir="+mydir;
    }
    function tips(obj){
      sorted==obj.ename ? mydir=-dir:mydir=dir;
      obj.href="sortby: 按["+obj.chname+"]["+ (mydir>0?"降序":"升序") +"]排列";
      obj.title="按["+obj.chname+"]["+ (mydir>0?"降序":"升序") +"]排列";
    }
    </script>
    <TABLE align=center bgColor="#0099CC" border=0 cellPadding=0 cellSpacing=0 width=500>
      <TBODY>
        <TR> 
          <TD height="20" align="center" background="img/tbg.gif" bgColor=#799ADD><font color="#FFFFFF">歌曲列表</font></TD>
        </TR>
        <TR> 
          <TD> <TABLE border=0 cellPadding=1 cellSpacing=1 width="100%">
              <TBODY>
                <TR bgColor=#becfed> 
    <?
    $sortdownsrc="img/sortdown.gif"; 
    $sortupsrc="img/sortup.gif";     function printtitle(){ #标题链接和输出图片
      global $ename,$sorted,$dir,$sortdownsrc,$sortupsrc,$chname;
      echo "<a href='#' onmouseover='tips(this)' onmousedown='sortby(this)' chname='$chname' ename='$ename'><font color='#0000FF'>$chname</font></a>";
        if($sorted==$ename){
        echo "<img src='". ($dir>0?$sortdownsrc:$sortupsrc) ."'>";
      }
    }
    ?>
        <? $ename="musicname"; $chname="歌曲名称"; ?>   <TD align=center> <? printtitle(); ?></TD>
        <? $ename="singer"; $chname="歌手";  ?>         <TD align=center> <? printtitle(); ?></TD>
        <? $ename="musicsize"; $chname="大小"; ?>       <TD align=center> <? printtitle(); ?></TD>  
    <?
    $i=1;
    $open=opendir("data/");
    while ($filename=readdir($open)) {
      if (filesize("data/".$filename)>0){
      $filecontent=file("data/".$filename);
      $msgs_info=explode("|",$filecontent[0]);
      $musicname=$msgs_info[0];
      $singer=$msgs_info[1];
      $musicsize=$msgs_info[2];
      //把要排序的类的值读到$sort_array[]中以便排序
      $sort_array[$i]=$$sorted;
      $filename_array[$i]=$filename; 
      $i++;
      }
    }
    $totalfile=count($sort_array);if($totalfile!=0){
      $dir>0 ? asort($sort_array) : arsort($sort_array);  $i=1;
      for(reset($sort_array); $key = key($sort_array); next($sort_array)) {
        //令 $key_array[] 为排好的数组下标
        $key_array[$i] = $key;
    $i++;
      }
     
      for ($i=1;$i<=$totalfile;$i++){
        $filecontent=file("data/".$filename_array[$key_array[$i]]);
        $msgs_info=explode("|",$filecontent[0]);
        $musicname=$msgs_info[0];
        $singer=$msgs_info[1];
        $musicsize=$msgs_info[2];
      
       echo "<TR bgColor=#ebf1f7> \n";
       echo "<td align=left>&nbsp;$musicname</td> \n";
       echo "<td align=left>&nbsp;$singer</td> \n";
       echo "<td align=left>&nbsp;$musicsize KB</td> \n";
       echo "</TR> \n";
      }
    }
      closedir($open);
    ?>          </TR>
              </TBODY>
            </TABLE></TD>
        </TR>
      </TBODY>
    </TABLE>
    </BODY>
    </HTML>