按元素排序数组[1]&元素[2]

时间:2011-04-05 03:26:48

标签: php sorting

我有以下数据(最终排序),我需要根据

对行进行排序
  1. 第一个元素 asc
  2. 然后是第二个元素 desc
  3. 然后是第三元素 desc
  4. 因为元素由.

    分隔
    edumate_3rdparty.20110209.1000.hourly.sql
    edumate_3rdparty.20110209.0800.hourly.sql
    edumate_3rdparty.20101209.Thursday.daily.sql
    moodle_acots.20110130.1600.hourly.sql
    moodle_acots.20110105.0800.hourly.sql
    moodle_tara.20110316.1200.hourly.sql
    moodle_tags.20110222.1000.hourly.sql
    moodle_tags.20110208.1801.hourly.sql
    moodle_will.20110302.1100.hourly.sql
    moodle_wollo.20101031.October.4.weekly.sql
    

    我怎么能在php中做到这一点?

2 个答案:

答案 0 :(得分:3)

以下是关于如何对数据集进行排序的示例。

<?php
$a=array();
$a[]=explode('.','edumate_3rdparty.20110209.1000.hourly.sql');
$a[]=explode('.','edumate_3rdparty.20110209.0800.hourly.sql');
$a[]=explode('.','edumate_3rdparty.20101209.Thursday.daily.sql');
$a[]=explode('.','moodle_acots.20110130.1600.hourly.sql');
$a[]=explode('.','moodle_acots.20110105.0800.hourly.sql');
$a[]=explode('.','moodle_tara.20110316.1200.hourly.sql');
$a[]=explode('.','moodle_tags.20110222.1000.hourly.sql');
$a[]=explode('.','moodle_tags.20110208.1801.hourly.sql');
$a[]=explode('.','moodle_will.20110302.1100.hourly.sql');
$a[]=explode('.','moodle_wollo.20101031.October.4.weekly.sql');
shuffle($a);
// all you need is this function
function special($a, $b){
    if($a[0]!=$b[0])return strcmp($a[0],$b[0]);// asc
    if($a[1]!=$b[1])return strcmp($b[1],$a[1]);// desc
    return strcmp($b[2],$a[2]);// desc
}
usort($a,'special');
// and maybe the above call
echo'<pre>';
foreach($a as $id=>$value)
    $a[$id]=implode('.',$a[$id]);
var_dump($a);
?>

我使用Paul的爆炸性想法来测试场景。所以拇指由他决定:)

答案 1 :(得分:2)

首先,我将使用explode将数据转换为数组。然后我会使用usort对其进行排序。

usort使您能够为排序提供比较功能。