基本上,我需要在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和其他在线资源中已有的代码构建的。
非常感谢所有帮助
答案 0 :(得分:3)
使用array_chunk()
将$_POST['items']
转换为嵌套数组,以便每个元素都是一组问答。循环遍历此数组,使用implode()
以逗号连接子数组的元素,并构造包含这些字符串的新数组。然后在这个新数组上使用implode()
将它们与换行符连接起来。
你说你不是要求任何人为你做这件事,所以我不在这里包括代码。阅读这些函数的文档,它应该非常简单。
答案 1 :(得分: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";
}
}