我有两个 JSON 编码数组
第一个数组
{<br/>
"User_id":2,
"Seeds":["11","22","31","14"]
}
第二个数组
{
"Seeds": [
{
"Team_name": "Belmont Bruins",
"Team_id": "22",
},
{
"Team_name": "Arkansas State Red Wolves",
"Team_id": "14",
},
{
"Team_name": "Arizona Wildcats",
"Team_id": "11",
},
{
"Team_name": "Brown Bears",
"Team_id": "31",
}
]
}
现在我需要根据第一个数组对第二个数组进行排序。第一个数组中的“Seeds”对应于第二个数组中的“Team_id”。 所需的输出是:
{
"Seeds": [
{
"Team_name": "Arizona Wildcats",
"Team_id": "11",
},
{
"Team_name": "Belmont Bruins",
"Team_id": "22",
},
{
"Team_name": "Brown Bears",
"Team_id": "31",
},
{
"Team_name": "Arkansas State Red Wolves",
"Team_id": "14",
}
]
}
我发现了类似的问题。但这些解决方案在这种情况下似乎不起作用。
最佳答案
您可以使用以下示例。我使用 array_flip()
创建一个查找,并根据该查找对第二个数组进行排序。
有这个 json:
$j1 = <<<EOF
{
"User_id":2,
"Seeds":["11","22","31","14"]
}
EOF;
// I needed to remove addtional commas here
$j2 = <<<EOF
{
"Seeds": [
{
"Team_name": "Belmont Bruins",
"Team_id": "22"
},
{
"Team_name": "Arkansas State Red Wolves",
"Team_id": "14"
},
{
"Team_name": "Arizona Wildcats",
"Team_id": "11"
},
{
"Team_name": "Brown Bears",
"Team_id": "31"
}
]
}
EOF;
...您可以执行以下操作:
// Convert to array
$a1 = json_decode($j1, true);
$a2 = json_decode($j2, true);
// Create lookup
$lookup = array_flip($a1["Seeds"]);
// sort array2
usort($a2["Seeds"], function($a, $b) use($lookup) {
if($lookup[$a["Team_id"]] > $lookup[$b["Team_id"]]) {
return 1;
} else if ($lookup[$a["Team_id"]] < $lookup[$b["Team_id"]]) {
return -1;
}
return 0;
});
// Done
var_dump($a2);
关于php - 根据另一个 JSON 编码数组对另一个数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29532767/