2015-05-25 80 views
0

我對數組的排序有問題。如何使用usort對合並的數組進行排序?

我使用兩個查詢在MySQL數據庫中提取從兩個不同的表的數據,然後使用array_merge加入在單個陣列中的結果。除排序問題外,一切正常。這兩個表有一個日期字段以這種格式5/25/2015,並且我想在此日期降序排列所提取的數據進行排序,但這並沒有發生。

這裏是我使用的代碼:

$sql = "SELECT * FROM tab1 WHERE data between '$one_parameter' and '$second_parameter' and id_ute = '$ute'"; 
$res = mysql_query($sql); 
$data = array(); 
while ($rows = mysql_fetch_array($res, MYSQL_ASSOC)) { 
    $data[] = $rows; 
} 

$sql2 = "SELECT * FROM tab2 WHERE data_ass between '$one_parameter' and '$second_parameter' and id_ute = '$ute'"; 
$res2 = mysql_query($sql2); 
$data2 = array(); 
while ($rows2 = mysql_fetch_array($res2, MYSQL_ASSOC)) { 
    $data2[] = $rows2; 
} 

$combinedData = array_merge($data,$data2); 

function cmp($a, $b){   
    return $b['data'] - $a['data_ass'];  
} 

usort($combinedData, "cmp"); 

$json = json_encode($combinedData); 
echo $json; 

但它不工作。我究竟做錯了什麼?

我需要創造這樣的事情,按時間順序:

[ 
    { 
     "id_tur": "1886", 
     "id_ute": "1", 
     "data": "2015-05-22", 
     "orario": "13.00 - 19.00", 
     "tipo_serv": "home", 
    }, 
    { 
     "id_tur": "1877", 
     "id_ute": "1", 
     "data": "2015-05-12", 
     "orario": "00.00 - 09.00", 
     "tipo_serv": "work", 
    }, 
    { 
     "id_ass": "256", 
     "id_ute": "1", 
     "data_ass": "2015-05-08", 
     "notes": "lorem", 
     "tipo_serv": "0", 
    }, 
    { 
     "id_turno": "1296", 
     "id_ute": "1", 
     "data": "2015-05-02", 
     "orario": "07.00 - 14.00", 
     "tipo_serv": "city", 
    } 
] 

回答

0

usort不同陣列的項目相同的屬性比較

改變你的第二個查詢:

$sql2 = "SELECT *, data_ass AS data FROM tab2 WHERE data_ass between '$one_parameter' and '$second_parameter' and id_ute = '$ute'"; 

與比較功能:

function cmp($a, $b){   
    return $b['data'] > $a['data'];  
} 
+0

非常感謝。它的工作原理應該如此 – Sixdas

相關問題