如何使用usort对合并的数组进行排序?

时间:2015-05-25 21:30:58

标签: php arrays json sorting

我对数组的排序有问题。

我使用两个查询从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",
    }
]

1 个答案:

答案 0 :(得分: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'];       
}