Php 按成本和名称对数组排序

Php 按成本和名称对数组排序,php,arrays,web-services,Php,Arrays,Web Services,以上是我的web服务的响应。 我想要数组('r')结果,首先按类别名称排序,如果类别名称相同,则该类别的结果应按job\u cost从高到低排序 因此,我期望的结果如下: { m: "1", total: "6", r: [ { job_id: "472", category: "plumbing", job_cost: "350", posted_on: "17 Dec 2015", completed_on: "17 Dec 2015", job_final_status: "1" },

以上是我的web服务的响应。 我想要数组('r')结果,首先按类别名称排序,如果类别名称相同,则该类别的结果应按
job\u cost
从高到低排序

因此,我期望的结果如下:

  {
m: "1",
total: "6",
r: [
{
job_id: "472",
category: "plumbing",
job_cost: "350",
posted_on: "17 Dec 2015",
completed_on: "17 Dec 2015",
job_final_status: "1"
},
{
job_id: "459",
category: "electrical",
job_cost: "600",
posted_on: "16 Dec 2015",
completed_on: "16 Dec 2015",
job_final_status: "1"
},
{
job_id: "457",
category: "electrical",
job_cost: "1000",
posted_on: "16 Dec 2015",
completed_on: "16 Dec 2015",
job_final_status: "1"
},
{
job_id: "456",
category: "carpentry",
job_cost: "350",
posted_on: "16 Dec 2015",
completed_on: "16 Dec 2015",
job_final_status: "1"
},
{
job_id: "454",
category: "electrical",
job_cost: "450",
posted_on: "16 Dec 2015",
completed_on: "16 Dec 2015",
job_final_status: "1"
},
{
job_id: "433",
category: "plumbing",
job_cost: "400",
posted_on: "15 Dec 2015",
completed_on: "15 Dec 2015",
job_final_status: "1"
}
]
}

首先,启动一个
MYSQL
查询,查询排序依据
field
,然后应相应地使用数组排序依据值
uasort()
函数。
试试这些,可能会对你有帮助。

这就是我解决你问题的方法

首先,使用以下方法解码信息:

{
m: "1",
total: "6",
r: [
{
job_id: "456",
category: "carpentry",
job_cost: "350",
posted_on: "16 Dec 2015",
completed_on: "16 Dec 2015",
job_final_status: "1"
},
{
job_id: "457",
category: "electrical",
job_cost: "1000",
posted_on: "16 Dec 2015",
completed_on: "16 Dec 2015",
job_final_status: "1"
},
{
job_id: "459",
category: "electrical",
job_cost: "600",
posted_on: "16 Dec 2015",
completed_on: "16 Dec 2015",
job_final_status: "1"
},
{
job_id: "454",
category: "electrical",
job_cost: "450",
posted_on: "16 Dec 2015",
completed_on: "16 Dec 2015",
job_final_status: "1"
},
{
job_id: "433",
category: "plumbing",
job_cost: "400",
posted_on: "15 Dec 2015",
completed_on: "15 Dec 2015",
job_final_status: "1"
},
{
job_id: "472",
category: "plumbing",
job_cost: "350",
posted_on: "17 Dec 2015",
completed_on: "17 Dec 2015",
job_final_status: "1"
}
]
}
然后,您可以创建一个空数组,用出现的类别填充该数组:

 $r = json_decode($yourJSONstring);
然后,您可以通过如下循环方式将具有相同类别的阵列组合在一起:

$occurring = array();
然后您可以按如下方式对其进行排序:

foreach ($r as $item) {
    if (isset($occurring [$item['category']])) {
        $occurring [$item['category']][] = $item;
    } else {
        $occurring [$item['category']] = array();
        $occurring [$item['category']][] = $item;
    }
}
具有如下功能:

foreach ($occurring as $key => $item) {
    $occurring[$key] = Classname::array_sort_by_column($item,"job_cost",SORT_DESC);
}

我希望这能解决您的问题:)

首先,启动一个MYSQL查询,然后使用数组sort by value()函数进行排序。尝试一下这些,可能会对您有所帮助。

从数据库中获取这些记录时,您可以自己进行排序。您应该使用
uasort()
使用
json\u decode($data,true)
来获取关联数组。然后,您可以向
usort()
提供一个自定义排序函数,以按您想要的方式对数组进行排序是的,但从数据库中,我可以仅按类别名称排序,或仅按作业成本排序。。这些不能满足我想要的答案..为什么数据库只允许按一列排序?!谢谢,这将每个aray元素分隔为类别名称。。但是没问题,我会处理的。。非常感谢。
static public function sort_by_column($sortArray, $columnName, $sortDirection = SORT_ASC) {
    $sortCol = array();

    foreach ($sortArray as $key => $row) {
      $sortCol [$key] = $row[$columnName];
    }

    array_multisort($sortCol , $sortDirection, $sortArray);

    return $sortArray;
}