0

基本上,我需要从一堆 HTML 文本输入中构造一个大字符串。

首先,这些文本输入是由一个按钮动态创建的,因此,可以有用户想要的任意数量的输入。

以下是每个动态创建的文本输入的格式:

[question]   [incorrect-answer1]
             [incorrect-answer2]
             [incorrect-answer3]
             [correct-answer]
             Remove

[] 包围的每个项目都是一个文本输入,“删除”是一个删除当前问题的按钮。

这是我创建每个动态问题的整个 jQuery 函数:

function dynamicForm () {

//set a counter
var i = $('.dynamic-input#form-step2').length + 1;
//alert(i);
//add input
$('a#add').click(function () {
    $('<table><tr><td><p><span class="left"><input type="text" class="dynamic-input" name="items[]" id="' + i + '" placeholder="Question" /></span>' +
        '<span class="right"><input type="text" class="dynamic-input" name="items[]" id="' + i + '" placeholder="Distraction 1" /><br /><input type="text" class="dynamic-input" name="items[]" id="' + i + '" placeholder="Distraction 2" /><br /><input type="text" class="dynamic-input" name="items[]" id="' + i + '" placeholder="Distraction 3" /><br /><input type="text" class="dynamic-input" name="items[]" id="' + i + '" placeholder="Correct Answer" /><br /><a href="#">Remove</a></span></p></td></tr></table>').fadeIn("slow").appendTo('#extender');
    i++;

    $("a:contains('Remove')").click(function () {
            $(this).parent().parent().remove();
    });

    return false;
});


//fadeout selected item and remove
$("#form-step2.dynamic-input").on('click', 'a', function () {
    $(this).parent().fadeOut(300, function () {
        $(this).empty();
        return false;
    });
});
}

这是创建每个问题的简单小按钮:

<a id="add" href="#">Add Question</a>

我需要达到的目标:

按下按钮后,我需要以某种方式收集所有问题元素,并将它们保存到字符串中。这是每个问题必须保存的格式:

question1,incorrect-answer1,incorrect-answer2,incorrect-answer3,correct-answer
question1,incorrect-answer1,incorrect-answer2,incorrect-answer3,correct-answer
question2,incorrect-answer1,incorrect-answer2,incorrect-answer3,correct-answer

如上所示,共有 3 个问题。每个问题必须用换行符分隔,即'\n'。顺序必须是问题,3个错误答案,然后是正确答案;全部用逗号分隔。

当然,我不是要求任何人为我做这件事。我只需要一些指导和支持,因为我还是 PHP 和 jQuery 的新手(学习 PHP 8 周,jQuery 2 周)。我的大部分代码都是由 Stack Overflow 和其他在线资源中已有的代码构建的。

非常感谢所有帮助

4

2 回答 2

3

用于array_chunk()转换$_POST['items']成嵌套数组,使每个元素都是一组问答。循环遍历这个数组,使用implode()逗号连接子数组的元素,并构造一个包含这些字符串的新数组。然后implode()在这个新数组上使用换行符将它们连接起来。

你说你没有要求任何人为你做这件事,所以我在这里不包括代码。阅读这些函数的文档,它应该非常简单。

于 2013-08-16T03:26:43.250 回答
1

作为 array_chunk 的一种更灵活的替代方案(因为将来您可能会有更多“不正确的答案”,并且需要不断更新 array_chunk 大小参数),您可以使用以下内容:

在您填充 DOM 元素的 javascript 片段中,您可以将 name 属性填充为多维数组(出于概念目的,我将项目从项目重命名为问题):

$('<table><tr><td><p><span class="left"><input type="text" class="dynamic-input" name="questions[' +i +'][]" id="' + i + '" placeholder="Question" /></span>' +
        '<span class="right"><input type="text" class="dynamic-input" name="questions[' +i +'][]" id="' + i + '" placeholder="Distraction 1" /><br /><input type="text" class="dynamic-input" name="questions[' +i +'][]" id="' + i + '" placeholder="Distraction 2" /><br /><input type="text" class="dynamic-input" name="questions[' +i +'][]" id="' + i + '" placeholder="Distraction 3" /><br /><input type="text" class="dynamic-input" name="questions[' +i +'][]" id="' + i + '" placeholder="Correct Answer" /><br /><a href="#">Remove</a></span></p></td></tr></table>').fadeIn("slow").appendTo('#extender');

所以这将是一个问题数组的数组。

在 PHP 端(类似于 array_chunk 帖子),您可以像这样使用 implode:

if(!empty($_POST['questions'])) {
    foreach($_POST['questions'] as $question) {
        echo implode(',',$question) ."\n";
    }
}
于 2013-08-16T03:53:56.627 回答