Найти идентификатор сообщения с наибольшим значением
У меня есть массив сообщений, которые я хочу отсортировать, но прежде чем я хочу найти id
поста с наибольшим количеством likes
,
Я перебираю массив, используя foreach. Хотя для этого кажется пустой тратой сделать два цикла foreach - я не знаю, есть ли альтернатива, когда пытаешься найти самое высокое значение заранее?
Array
(
[0] => Array
(
[id] => 162
[like_count] => 2
etc.
)
[1] => Array
(
[id] => 165
[like_count] => 23
etc.
)
)
Так что во втором посте наибольшее количество лайков, поэтому мне нужен идентификатор 165 - тогда, когда я перехожу, я могу сделать что-то вроде
foreach ($posts as $post){
if($most_liked_id == $post["id"]){
// this post is the most liked!
}
}
Любая помощь будет высоко ценится - спасибо!
9 ответов
$highest = 0;
$highest_id = 0;
foreach($array as $a) {
if($a['like_count'] > $highest) {
$highest = $a['like_count'];
$highest_id = $a['id'];
}
}
Надеюсь, я вас правильно понял:)
Очень простая задача, вы просматриваете свои сообщения.
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']
}
Это похоже на данные, полученные из базы данных. Если это так, используйте ORDER BY like_count DESC
предложение в SQL.
Идентификатор поста с наибольшим количеством лайков будет $posts[0]['id']
прежде чем сортировать другим методом.
Вы можете отсортировать массив в порядке убывания на основе like_count
а затем забрать id
для первого элемента массива.
Ты можешь использовать max
Функция для получения наибольшего значения лайков:
foreach ($posts as $post){
$max[]=$post['like_count'];
}
echo max($max['id']);
$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]
Попробуй это:
usort($posts, function($item) { return -$item['like_count']; });
$id = empty($posts) ? null : $posts[0]['id'];
куда $posts
это входной массив.
Объяснение:
- сначала вы сортируете посты по количеству как в порядке убывания
- тогда вы получите верхний идентификатор сообщения, если есть какие-либо сообщения, в противном случае ноль
Что хорошо в этом решении, так это то, что вы также можете выбрать первые n сообщений.
Эти данные пришли из базы данных, как MySQL? Если это так, то самое простое решение - поставить "ORDER BY".
Вы также можете сделать отдельный массив 'like_count', сохранив тот же ключ, что и ваш первый массив, и выполнить asort ( http://www.php.net/manual/fr/function.asort.php). У вас будет ключ с наибольшим количеством слов.
Вы могли бы использовать 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