2011-04-05 62 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使您能夠爲排序提供比較功能。