按id排序json输出

时间:2015-03-18 16:27:59

标签: php android json usort

我正在创建一个将json提要解析为listactivity的应用。我已经读过在listview的底部添加了新项目,这就是我的应用中的情况。我试图通过按降序排序我的json输出来解决这个问题。不知道这是否能解决我的问题,或者我需要在我的java代码中解决它。我的问题的第一部分是,更改数据库输出的顺序会改变Feed在应用程序中的显示顺序吗?如果是这样,我已经尝试按照http://php.net/manual/en/function.usort.php上的示例修改我的PHP脚本,但订单没有改变。第二部分,我在下面的PHP脚本中做错了什么?

<?php


require("config.inc.php");
$query_params=null;


//initial query
$query = "Select * FROM feeds";

//execute query
try {
    $stmt   = $db->prepare($query);
    $result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
    $response["success"] = 0;
    $response["message"] = "Database Error!";
    die(json_encode($response));
}

// Finally, retrieve all of the found rows into an array using fetchAll
$rows = $stmt->fetchAll();

if ($rows) {
    $response["feed"]   = array();

    foreach ($rows as $row) {
        $post             = array();
        $post["id"] = $row["id"];
        $post["name"]    = $row["name"];
    $post["status"] = $row["status"];

        //update our repsonse JSON data
        array_push($response["feed"], $post);
    }

    function cmp($a, $b)
    {
    if ($a->id == $b->id) {
        return 0;
            }
    return ($a->id > $b->id) ? -1 : 1;
    }

    $a = array();
    usort($a, "cmp");

    // echoing JSON response
    echo json_encode($response, JSON_NUMERIC_CHECK);


} else {
    $response["success"] = 0;
    $response["message"] = "No Post Available!";
    die(json_encode($response));
}

?>

1 个答案:

答案 0 :(得分:0)

看起来你在空数组上调用usort,而不是你实际想要排序的数据。

而不是

$a = array();
usort($a, "cmp");

尝试

$a = $response['feed'];
usort($a, "cmp");
$response['feed'] = $a;

Blackbelt是对的,你不能在技术上对JSON数组进行排序,至少有一个是顺序索引(根本不会产生索引)。但实际上,当您在客户端迭代生成的对象时,它将按照定义的顺序进行,因此对服务器端进行排序不应引起任何问题。