我正在尝试通过php中的键对json数组进行排序。尽管我使用了 usort ,但是它不起作用。 我的json数组是
$data = [
{
"profile_name": "J3S",
"post_count": 9
},
{
"profile_name": "John",
"post_count": 3
},
{
"profile_name": "sato",
"post_count": 10
}
]
我想按post_count对数组进行排序。
这是我尝试过的代码。
$data = json_encode($data, true);
usort($data, function ($a, $b) {
return $a['post_count'] <=> $b['post_count'];
});
能请你帮我吗?
答案 0 :(得分:1)
您可以使用array_multisort
有效地做到这一点:
$array = json_decode($data, true);
array_multisort(array_column($array, 'post_count'), SORT_ASC, $array);
echo json_encode($array, JSON_PRETTY_PRINT);
输出:
[
{ "profile_name": "John", "post_count": 3 }
{ "profile_name": "J3S", "post_count": 9 },
{ "profile_name": "sato", "post_count": 10 },
]
如果您想按post_count
降序排序,只需在对SORT_ASC
的调用中将SORT_DESC
更改为array_multisort
。
请注意,此代码假定$data
实际上是JSON字符串。如果它实际上是问题中JSON表示的数组,则可以跳过json_decode
步骤。
答案 1 :(得分:0)
您必须解码json,而不是对其进行编码:
$data = '[
{
"profile_name": "J3S",
"post_count": 9
},
{
"profile_name": "John",
"post_count": 3
},
{
"profile_name": "sato",
"post_count": 10
}
]';
$data = json_decode($data, true);
usort($data, function ($a, $b) {
return $a['post_count'] <=> $b['post_count'];
});
我认为您的json是字符串,因为如果不是,那是无效的php。
输出(var_dump($ data);):
array(3) {
[0]=>
array(2) {
["profile_name"]=>
string(4) "John"
["post_count"]=>
int(3)
}
[1]=>
array(2) {
["profile_name"]=>
string(3) "J3S"
["post_count"]=>
int(9)
}
[2]=>
array(2) {
["profile_name"]=>
string(4) "sato"
["post_count"]=>
int(10)
}
}
答案 2 :(得分:0)
您可以通过usort()
函数来做到这一点。
添加回调函数,并每次比较profile_count
。
<?php
$data = [
["profile_name"=> "J3S", "post_count"=> 9],
["profile_name"=> "John", "post_count"=> 3],
["profile_name"=> "sato", "post_count"=> 10]
];
function cmpBySort($a, $b) {
return $a['post_count'] - $b['post_count'];
}
usort($data, 'cmpBySort');
echo '<pre>';print_r($data);echo '</pre>';
输出:
Array
(
[0] => Array
(
[profile_name] => John
[post_count] => 3
)
[1] => Array
(
[profile_name] => J3S
[post_count] => 9
)
[2] => Array
(
[profile_name] => sato
[post_count] => 10
)
)