我正在创建一个Web表单,该表单可能具有多个具有相同表单元素名称的输入。我需要检索表单的结果并一一输出。
即。 name="supplier[]"
和name="listPrice[]"
可能有多个结果,我需要按顺序返回每个数组的结果:
供应商:[0],标价:[0]
供应商:[1],标价:[1]
等等。
我有一个计数器,该计数器也保存为数组,以为每个“分组”结果提供上下文,并且一个foreach循环当前为该计数器提供正确的输出,但仅此而已。可能我有限的PHP /数组知识,或者只是研究了太长时间,这使我完全错过了最佳解决方案。
表单结构如下:
<h4>Request #` + counter + `</h4>
<input type="hidden" name="codeId[]" class="code-id" value="` + counter + `">
<select class="custom-select supplier-select" name="supplier[]" id="supplier` + counter +`">
<option selected value>Default</option>
<option value="One">Supplier One</option>
<option value="Two">Supplier Two</option>
<option value="Three">Supplier Three</option>
</select>
<input type="text" placeholder="" class="form-control list-price" name="listPrice[]" aria-label="List Price" required>
jQuery捕获结果并将其存储在多个数组中,然后传递到process.php
:
var formValues = {
codeId : $('.code-id'),
supplier : $('.supplier-select'),
listPrice : $('.list-price')
};
$.each(formValues, function(key, value) {
var data = value.map(function() {
return $(this).val();
}).get();
for (var i = 0; i < data.length; i++) {
formData.append(key + '[]', data[i]);
console.log(key + " " + data);
}
});
然后我尝试遍历PHP中的每个代码,并且我必须将其存储为单个字符串以传递到我的邮件程序代码中:
if(is_array($codeId)) {
foreach ($supplier as $key => $value) {
$suppliers .= $value;
}
foreach ($listPrice as $key => $value) {
$listPrices .= $value;
}
foreach ($codeId as $key => $value) {
$string .= "Request #" . $codeId[$key] . "<br />";
$string .= $suppliers . "<br />";
$string .= $listPrices . "<br />";
}
} else {
$string = 'Failed';
}
以此形式提交表单-
供应商:[选择]一,定价:[输入] 3423
供应商:[选择]二,标价:[输入] 466
产生以下内容,我知道我已经接近了,但是不确定如何做到最好!
Request #1
OneTwo
3423466
Request #2
OneTwo
3423466
我想念什么?或者如何更好地处理呢?任何帮助表示赞赏。
答案 0 :(得分:0)
PHP脚本完全按照您的编码进行操作。您正在将结果串联到一个字符串中,这就是您要输出的内容。听起来您想要的是每个结果都位于不同的部分。
您可以通过在$key
循环(第三个循环)中使用foreach
迭代器来选择其他数组中的相应元素来实现这一点,就像这样:
if(is_array($codeId)) {
// get rid of the other loops
$string = "";
foreach ($codeId as $key => $value) {
$string .= "Request #" . $codeId[$key] . "<br />";
$string .= $supplier[$key] . "<br />";
$string .= $listPrice[$key] . "<br />";
}
}
这假定它们的长度相同,并且i
中的条目listPrices
对应于i
数组中的条目codeId
和supplier
(您可以检查或强制执行此操作。
答案 1 :(得分:0)
合并要发送的数据时,请注意以下事项。
$(function() {
var formValues1 = {
codeId: $('.code-id').val(),
supplier: $('.supplier-select').val(),
listPrice: $('.list-price').val()
};
var formValues2 = {
"codeId[]": $('.code-id').val(),
"supplier[]": $('.supplier-select').val(),
"listPrice[]": $('.list-price').val()
};
var formData = new FormData();
$.each(formValues1, function(key, value) {
formData.append(key + '[]', value);
console.log(key + ": " + value);
});
console.log(JSON.stringify(formValues2));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h4>Request #1</h4>
<input type="hidden" name="codeId[]" class="code-id" value="1">
<select class="custom-select supplier-select" name="supplier[]" id="supplier-1">
<option selected value>Default</option>
<option value="One">Supplier One</option>
<option value="Two">Supplier Two</option>
<option value="Three">Supplier Three</option>
</select>
<input type="text" placeholder="" class="form-control list-price" name="listPrice[]" aria-label="List Price" required>
您可能还想使用.each()
来迭代组选择。
希望有帮助。