0

id我有一系列要排序的帖子- 但在此之前,我想找到likes.

我使用 foreach 遍历数组。虽然为此执行两个 foreach 循环似乎很浪费 - 我不知道在尝试事先找到最高值时是否有替代方案?

Array
(
    [0] => Array
        (
            [id] => 162
            [like_count] => 2
            etc.
        )
    [1] => Array
        (
            [id] => 165
            [like_count] => 23
            etc.
        )

)

所以第二个帖子的点赞数最高,所以我需要 165 的 ID - 然后当我循环浏览时,我可以做类似的事情

foreach ($posts as $post){
    if($most_liked_id == $post["id"]){
       // this post is the most liked!
    }
}

任何帮助将不胜感激 - 谢谢!

4

9 回答 9

1
$highest = 0;
$highest_id = 0;

foreach($array as $a) {

    if($a['like_count'] > $highest) {

        $highest = $a['like_count'];
        $highest_id = $a['id'];
    }
}

希望我理解正确:)

于 2013-06-26T08:05:28.480 回答
0

这看起来像是从数据库中检索到的数据。如果是这样,请使用ORDER BY like_count DESCSQL 中的子句。

$posts[0]['id']在您按其他方法排序之前,最喜欢的帖子的 ID 将位于。

于 2013-06-26T08:04:15.960 回答
0

非常简单的任务,你循环浏览你的帖子。

function get_max_like_post($posts) {
    $max_like = 0;
    $max_like_post = array();
    foreach ($posts as $post) {
        if ($post['like_count'] > $max_like) {
            $max_like = $post['like_count'];
            $max_like_post = $post;
        }
    }

    return $max_like_post['id']
    }
于 2013-06-26T08:05:09.137 回答
0

您可以根据降序对数组进行排序like_count,然后选择id第一个数组元素。

于 2013-06-26T08:16:32.113 回答
0

你可以使用usort.

$posts = array(
    array('id' => 161, 'like_count' => 0),
    array('id' => 162, 'like_count' => 6),
    array('id' => 4, 'like_count' => 2),
);

function like_sort($a, $b) {
    if ($a['like_count'] == $b['like_count']) {
        return 0;
    }
    return ($a['like_count'] > $b['like_count']) ? -1 : 1;
}
usort($posts, 'like_sort');

// The first element in the array is now the one with the highest like_count.
echo $posts[0]['id']; // 162
于 2013-06-26T08:08:00.973 回答
0

尝试这个:

usort($posts, function($item) { return -$item['like_count']; });
$id = empty($posts) ? null : $posts[0]['id'];

$posts输入数组在哪里。

解释:

  • 首先,您按喜欢的数量以递减的方式对帖子进行排序
  • 然后,如果有任何帖子,您将获得顶部的帖子 ID,否则为 null。

这个解决方案的好处是您还可以选择前n个帖子。

于 2013-06-26T08:08:39.910 回答
0
$highest_post_likes = 0;
$highest_post_id = 0;
for($i = 0; $i < sizeof($posts); $i++) {
    if ( $posts[$i][like_count] > $highest_post_likes ) {
        $highest_post_likes = $posts[$i][like_count];
        $highest_post_id = $i;
    }
}

// now you can use $posts[$highest_post_id]
于 2013-06-26T08:08:45.447 回答
0

您可以使用max函数来获得最高的喜欢值:

        foreach ($posts as $post){
        $max[]=$post['like_count'];
    }

echo max($max['id']);
于 2013-06-26T08:10:02.370 回答
0

这些数据是否来自 MySQL 之类的数据库?如果是这样,最简单的解决方案是放置一个“ORDER BY”。

您还可以将“like_count”数组分开,保持与第一个数组相同的键并进行排序(http://www.php.net/manual/fr/function.asort.php)。您将拥有最高点赞数的钥匙。

于 2013-06-26T08:10:27.623 回答