У меня есть массив, который выглядит следующим образом,Как эффективно подсчитать рейтинг пользователя amout из понравившихся?
$users = array(
0 => array(
'user_id' => 'user_1',
'likes' => 50,
),
1 => array(
'user_id' => 'user_2',
'likes' => 72
),
2 => array(
'user_id' => 'user_3',
'likes' => 678
)
);
Все, что я хочу сделать, это реализовать систему рейтингов по количеству подобных, так что это будет выглядеть как:
#rank 1 - user_3
#rank 2 - user_2
#rank 3 - user_1
Я закончил с,
$user_counter = new User_Counter();
$user_counter->setData($users);
echo $user_counter->fetchRankByLikes(678);
class User_Counter
{
protected $array;
public function setData(array $array)
{
$this->array = $this->sort($array);
}
protected function sort(array $array)
{
$result = array();
foreach ($array as $index => $_array) {
$result[] = $_array['likes'];
}
// This will reset indexes
sort($result, SORT_NUMERIC);
$result = array_reverse($result);
$return = array();
$count = 0;
foreach ($result as $index => $rank) {
$count++;
$return[$count] = $rank;
}
$return = array_unique($return);
return $return;
}
public function getAll()
{
return $this->array;
}
public function fetchRankByLikes($likes)
{
$data = array_flip($this->array);
return $data[$likes];
}
public function fetchLikesByRank($rank)
{
return $this->array[$rank];
}
}
Моя проблема заключается в том, что этот подход лежит иногда - например, он дает неправильную информацию, когда нет любит вообще (то есть === все меня у кого есть 0 нравится) - в этом случае он дает им первый ранг.
Есть ли еще один эффективный способ подсчета рейтинга пользователя по количеству их понравившихся? Или что я делаю неправильно в своих вычислениях? Спасибо.