计算出现次数

时间:2016-03-21 16:05:29

标签: laravel laravel-5 laravel-5.1

我有一个可以创建民意调查的后端。在民意调查中,我可以创建一个PollQuestion。对于PollQuestion,我可以创建许多PollAnswer。

如果我在控制器中执行此类操作

$poll = DB::table('poll')->orderBy('id', 'desc')->first();
$question = DB::table('poll_question')->where('poll_id', $poll->id)->first();
$answers = DB::table('poll_answer')->select('answer')->where('question_id', $question->id)->get();

print_r("<pre>");
    print_r($answers);
print_r("</pre>");

我可以看到如下输出

Array
(
    [0] => stdClass Object
        (
            [answer] => Answer 1
        )

    [1] => stdClass Object
        (
            [answer] => Answer 2
        )

    [2] => stdClass Object
        (
            [answer] => Answer 3
        )

    [3] => stdClass Object
        (
            [answer] => Answer 4
        )

)

因此,上述民意调查给​​出了PollQuestion的4个可能答案。

现在我有一个显示问题的前端,以及每个PollAnswer的单选按钮。当他们选择一个并保存时,我得到一个PollResponse。如果我做这样的事情

$pollResponses = DB::table('poll_response')->select('response')->where('poll_id', $poll->id)->get();

输出可能是这样的

Array
(
    [0] => stdClass Object
        (
            [response] => Answer 1
        )

    [1] => stdClass Object
        (
            [response] => Answer 4
        )

    [2] => stdClass Object
        (
            [response] => Answer 4
        )

    [3] => stdClass Object
        (
            [response] => Answer 2
        )

    [4] => stdClass Object
        (
            [response] => Answer 3
        )
)

所以我可以看到人们选择了什么。现在,对于每个可能的PollAnswer,我需要计算与其相关的PollResponse的数量。所以对于上面的数据,我应该得到像

这样的东西
1 = 1
2 = 1
3 = 1
4 = 3

我是否有任何简单的方法可以在Laravel中执行此操作,或者我是否需要循环使用Answers和Responses来获取个人计数?

由于

2 个答案:

答案 0 :(得分:2)

我不知道任何特定于laravel的解决方案,但你总是可以将响应推送到一个单独的数组,然后在新数组上使用php函数array_count_values($array)http://php.net/manual/en/function.array-count-values.php

$newArray = array();
for($i=0; $i < count($pollResponses); $i++){
    array_push($newArray, $pollResponses[$i]->response);
};

$count = array_count_values($newArray);

它将返回一个二维数组,其中答案为键,并且它作为值出现的次数。

答案 1 :(得分:1)

假设您正在使用模型,您可以在Laravel中执行此操作

$polls = Poll::with(['questions.answers'])->get();

您的Poll.php文件

...
class Poll extends Model{
    public function questions(){
        return $this->hasMany(Question::class);
    }
}

您的Question.php文件

...
class Question extends Model{
    public function answers(){
        return $this->hasMany(Answer::class);
    }
}

然后在你的视图文件中(假设它是.blade.php)

@foreach($polls as $poll)
    @foreach($poll->questions as $question)
        {{ $question->title }}
        <ul>
            @foreach($question->answers as $answer)
                <li>{{ $answer->title }} </li>
            @endforeach
        </ul>
    @endforeach
@endforeach