从我的数据库返回的数据已加密。所以在SQL结束时运行一个订单是行不通的。所以我必须在服务器端排序。
我看到很多关于此的问题我已经尝试了一些建议,但我似乎无法接受 排序。我试过这个routine和this one(看起来最接近我要找的东西)。
发生了两件事:
1:不按名称字段(键)
排序2:我们的内部应用程序抱怨它不再是JSON字符串。
我需要将此名称排序,因此我需要自定义排序
我得到这样的数组:
$jsonData = array();
...connected to the DB.... stuff here...
//loop through the return:
if($result->num_rows > 0)
{
while($row = $result->fetch_assoc())
{
$row["name"] = $this->decryptData($row["name"]);
$jsonData["groups"][] = $row ;
}
}
$result->close();
mysqli_close($mysqli);
return $jsonData;
返回代码如下所示:
{
"groups": [
{
"id": "71",
"name": "Bob",
},
{
"id": "73",
"name": "Howard",
},
{
"id": "79",
"name": "Sam",
},....
....{
"id": "65",
"name": "Al",
}
]
}
好的,所以我在我的例程底部添加了这个代码来排序(注意我尝试了方法):
....代码
/*usort($jsonData, function($a, $b) {
return $a['name'] - $b['name'];
});*/
usort($jsonData, function($a, $b) {
return strcasecmp($a['name'], $b['name']);
});
/* and I tried this get the same output but with a php error say what I have is not a array
array_multisort($jsonData['name']);
-- and this--
array_multisort($jsonData['groups']['name']);
*/
$result->close();
mysqli_close($mysqli);
return $jsonData;
我得到的结果与我需要的结果略有不同,而且没有按名称排序:
[
[
{
"id": "71",
"name": "Bob",
},
{
"id": "73",
"name": "Howard",
},
{
"id": "79",
"name": "Sam",
},....
....{
"id": "65",
"name": "Al",
}
]
]
我此刻迷失了。
答案 0 :(得分:1)
您无法将算术应用于字符串值进行比较;你需要一个字符串函数,例如strcmp()
或strcasecmp()
,它返回-1,0或1的值:
usort($jsonData, function($a, $b) {
return strcasecmp($a['name'], $b['name']);
});
答案 1 :(得分:0)
您可以使用usort
usort($jsonData['group'], function($a, $b) {
return $a['name'] - $b['name'];
});
并尝试print_r($jsonData)