gpt4 book ai didi

php - 在 Symfony、MongoDB 中查找 ArrayCollection 中元素的平均值

转载 作者:行者123 更新时间:2023-12-04 08:46:01 25 4
gpt4 key购买 nike

我有一类新闻有用户评分。我的目标是找到所有评分的平均值,我使用的是 MongoDB。我试图找到一个已经用于普通内置的函数,但我找不到。所以我打算
使用 count() 函数,然后获取数组集合中所有元素的总和,然后将总和除以计数,但是总和效果不佳,是否有内置函数?如果不是,我如何在 PHP 数组集合中迭代并添加值

 public function __construct()
{
$this->positiveFeedback = new ArrayCollection();
$this->negativeFeedback = new ArrayCollection();
$this->rating = new ArrayCollection();
}

/**
* @return Collection|Rating[]
*/
public function getRating(): Collection
{
return $this->rating;
}

public function addRating(Rating $rating): self
{
if (!$this->rating->contains($rating)) {
$this->rating[] = $rating;
$rating->setNews($this);
}

return $this;
}

public function removeRAting(Rating $rating): self
{
if ($this->rating->contains($rating)) {
$this->rating->removeElement($rating);
// set the owning side to null (unless already changed)
if ($rating->getNews() === $this) {
$rating->setNews(null);
}
}

return $this;
}
/**
* Get the value of RatingAverage
*/
public function getRatingAverage()
{
$ratingsNumber = $this->getRating()->count();
$ratingSum = $this->getRating()->getValues();

}
getRatingAverage 是我被困的地方

最佳答案

不,没有计算它的内置方法,但是您可以将其转换为常规数组并很容易地使用数组函数。
假设您的 Rating类有一个名为 score 的属性:

public function getRatingAverage()
{
$ratingsNumber = $this->getRating()->count();

if (0 === $ratingsNumber)
return;

$scores = $this->getRating()
// Get a new collection containing only the score values
->map(function($rating) { return $rating->getScore(); })
// Transform into an array
->getValues();

$ratingSum = array_sum($scores);
$ratingAvg = $ratingSum / $ratingsNumber;

return $ratingAvg;
}
然而 Collection是可迭代的,因此您可以使用常规 foreach如果你想循环它。
Reference for the Collection methods

关于php - 在 Symfony、MongoDB 中查找 ArrayCollection 中元素的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64318986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com