仅计算在 Laravel 4 中具有值的输入


Count only inputs with value in Laravel 4

我正在尝试在Laravel中创建多项选择测验,

这是管理员用来在数据库中插入问题的形式,所以这不是为了玩测验!

我使用角度来显示和隐藏答案 C D E 和 F,在加载页面时仅显示 A 和 B。

这个想法是创建一个 for 循环,以便我可以插入每个不为空的答案。

如何在拉拉维尔中执行此操作?我想count(Input::get('answer'))但它不起作用。即使它有效,它仍然会计算我所有的答案,但不会计算有价值的答案。

我所有的答案输入都有相同的名称。

请帮忙!

{{ Form::open(['action' => 'QuizController@storeQuestions']) }}
                {{ Form::hidden('id', $quiz->id) }}
                <div class="form-group">
                    <label class="form-label">Question:</label>
                    {{ Form::text('question', Input::old('question'), array('class' => 'form-control')) }}
                </div>
                <div class="form-group">
                    <label class="form-label">Answer A:</label>
                    {{ Form::text('answer', Input::old('answer'), array('class' => 'form-control')) }}
                    {{ Form::radio('is-correct')  }}
                </div>
                <div class="form-group">
                    <label class="form-label">Answer B:</label>
                    {{ Form::text('answer', Input::old('answer'), array('class' => 'form-control')) }}
                    {{ Form::radio('is-correct')  }}
                </div>
                <!-- De '+' krijgt de showInput van de vorige input! -->
                <div class="form-group">
                    <span class="add-question-button"><a class="plus-input" ng-click="addAnswer(1)">+</a></span>
                </div>
                <div  ng-show="showInput1"  class="form-group">
                    <label class="form-label">Answer C:</label>
                    {{ Form::text('answer', Input::old('answer'), array('class' => 'form-control')) }}
                    {{ Form::radio('is-correct')  }}
                </div>
                <div class="form-group">
                    <span class="add-question-button"><a ng-show="showInput1" ng-click="addAnswer(2)" class="plus-input">+</a></span>
                </div>
                <div ng-show="showInput2" class="form-group">
                    <label class="form-label">Answer D:</label>
                    {{ Form::text('answer', Input::old('answer'), array('class' => 'form-control')) }}
                    {{ Form::radio('is-correct')  }}
                </div>
                <div class="form-group">
                    <span class="add-question-button"><a ng-show="showInput2" ng-click="addAnswer(3)" class="plus-input">+</a></span>
                </div>
                <div ng-show="showInput3" class="form-group">
                    <label class="form-label">Answer E:</label>
                    {{ Form::text('answer', Input::old('answer'), array('class' => 'form-control')) }}
                    {{ Form::radio('is-correct')  }}
                </div>
                <div class="form-group">
                    <span class="add-question-button"><a ng-show="showInput3" ng-click="addAnswer(4)" class="plus-input">+</a></span>
                </div>
                <div ng-show="showInput4" class="form-group">
                    <label class="form-label">Answer F:</label>
                    {{ Form::text('answer', Input::old('answer'), array('class' => 'form-control')) }}
                    {{ Form::radio('is-correct') }}
                </div>
                {{ Form::submit('Next question', array('class' => 'btn btn-primary btn-block')) }}
                <button class="btn btn-success btn-block">Finish</button>
            {{ Form::close() }}

你构建表单的方式有点令人困惑。

如果这是一个多项选择测验,则答案应该是不可编辑的(标签),并且用户应该只需要使用单选按钮选择正确的答案。

在这种情况下,您可以将单选按钮值设置为答案文本(或 ID,如果要从数据库中提取可用答案)。

例如:

<label>Who was the first man on the moon?</label>
<label>
    <input type="radio" name="man_on_moon" value="Armstrong" /> Neil Armstrong
</label>
<label>
    <input type="radio" name="man_on_moon" value="Aldrin" /> Buzz Aldrin
</label>
<label>
    <input type="radio" name="man_on_moon" value="Hanks" /> Tom Hanks
</label>

(新答案,作为对修订问题的回应)

从你对问题的措辞来看,我假设一个问题的最大答案数是固定的。让我们进一步假设您用字母 A 到 F 来标识它们,如您的示例所示。

鉴于您的"答案"字段接受多个响应,其名称应包含方括号。我们可以按如下方式确定每个单独的答案:

<input type="text" name="answerswer[A]" />

我们可以通过构造以下形式的单选按钮来识别正确答案:

<input type="radio" name="correct_answer" value="A" />

在控制器中调用Input::get('answer')将返回一个关联数组,其中键是答案标识符(A 到 F),值是答案文本。

您可以使用 PHP 的 array_filter 函数来过滤掉空答案。

$answers = array_filter(Input::get('answer'));