php - 试图在 postcount 上对我的 foreach 循环结果进行排序
问题描述
尝试根据从 Invision powerboard API(论坛软件)获得的帖子计数对顶级海报进行排序。无法弄清楚如何对我的 foreach 循环的这个回声进行排序。
$curl = curl_init( $communityUrl . '/core/members/' );
curl_setopt_array( $curl, array(
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_USERPWD => "{$apiKey}:"
) );
$response = curl_exec( $curl );
$data = json_decode($response, true);
$count = 0;
foreach($data as $member) {
if (is_array($member)) {
foreach($member as $name) {
if($count > 4)
return;
echo '<p class="top-member-p"><a href="'.$name['profileUrl'].'">'.ucfirst($name['name']).'</a> has '.$name['posts'] . ' posts</p>';
$count++;
}
}
}
我希望按照他们的帖子数对结果进行排序,如下所示:
"Swaghetti has 34 posts"<br>
"Josh has 15 posts"<br>
"Test has 3 posts"<br>
"Testuser2 has 0 posts"
但相反,它是这样的:
"Swaghetti has 34 posts"<br>
"Testuser2 has 0 posts"<br>
"Test has 3 posts"<br>
"Josh has 15 posts"
解决方案
如果您没有其他选择来检索已排序的数据,您可以自己进行 - 使用usort()
- 由您自己的函数排序。与其他posts
值进行比较,并将它们相应地放置在数组中(如果应该向上移动则返回 1,如果应该向下移动则返回 -1)。
我还添加array_slice()
了,因为你似乎只想要前 4 个元素(这样你只得到那些,不需要计数器)。
// Test-data, I guessed my way to your format to match the output from what you had in the question
$data = [
[['name' => 'Testuser2', 'posts' => 0, 'profileUrl' => 'swag']],
[['name' => 'Josh', 'posts' => 15, 'profileUrl' => 'swag']],
[['name' => 'Test', 'posts' => 3, 'profileUrl' => 'swag']],
[['name' => 'Swaghetti', 'posts' => 34, 'profileUrl' => 'swag']],
];
// $data = json_decode($response, true);
usort($data, function($a, $b) {
$a = array_column($a[0], 'posts');
$b = array_column($b[0], 'posts');
return ($a < $b) ? -1 : 1;
});
$slieced = array_slice($data, 0, 4);
foreach($slieced as $member) {
if (is_array($member)) {
foreach($member as $name) {
echo '<p class="top-member-p">
<a href="'.$name['profileUrl'].'">'.ucfirst($name['name']).'</a>
has '.$name['posts'] . ' posts
</p>'."\n";
}
}
}
推荐阅读
- c# - 如何使用 CodeDom 进行异步调用和函数定义?
- c++ - 用 C++ 编写类型类
- hibernate - 从 DB2 获取 DB2 SQL 错误:SQLCODE=-803, SQLSTATE=23505
- ios - 使用 UISearchBar 时 UITableView 变为 nil
- visual-studio-code - 当我构建项目时,vs-code 突然从 node_modules 弹出“更改”文件
- imagemagick - 如何在不丢失大量信息的情况下使用 GOmagick 将图像压缩到最大
- html - 使用弹性框如何在 div 下居中文本
- java - NYSIIS 中 BOSCH 的正确编码是什么?
- javascript - Javascript/Typescript:使用 map/reduce 从其他数组生成新数组?
- c++ - OpenGL、立方体贴图、顶点和片段着色器