2011-04-05 40 views
0

我有像下面(最终排序)的数据和予需要在第一元件ASC基于排序阵列由元件[1]元素[2]

  1. 行排序和
  2. 然后由第二元件降序
  3. 然后由第三元件降序

的元素由.

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中分离出来?

+0

那么......你担心它会做多快? – Khez 2011-04-05 03:40:40

回答

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); 
?> 

我用保罗的爆炸的想法来得到测试场景。所以大拇指向他:)

+0

+1执行工作很好。 – Paul 2011-04-05 03:54:19

+0

更新了一些implodes让字符串恢复原样,尽管我非常怀疑数据并不是一开始就是一个数组。 – Khez 2011-04-05 03:59:09

+0

@Khez:不按要求工作。输出给我''moodle_acots.20110105.0800.hourly.sql“,”moodle_acots.20110130.1600.hourly.sql“'它应该是相反的。 20110130> 20110105 – Radek 2011-04-05 05:39:47

2

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

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