使用ajax将Php数组传递/发送到其他Php文件,并在其他Php文件中使用foreach作为数组


Php array with ajax pass/send to other php file and in the other php file use as array with foreach

具有类似<input type="text" name="record_date[] ... 的输入表单

将表单发送到其他php文件的ajax部分是

var values = $("form").serialize();
$.ajax({
type: 'POST',
data: { 'Values' : values },
dataType: 'json',

另一个php文件接收数据

$values = $_POST['Values'];

正如所理解的,parse_str($_POST['Values'],$output);创建数组($output是数组)

但有了这个print_r(json_encode($output));,我什么也看不到(预计会看到带值的数组等)

如果使用echo json_encode($output['record_date']);,则所有操作都有效,并获得输入的值。

尝试创建数组,然后像一样使用数组

 foreach ($output as $i=>$output_value ) {
 echo json_encode($output_value[$i]);
 }

已更改为此echo json_encode($output_value['record_date'][$i]);,但在这两种情况下均无回音。

据我所知,主要问题是如何将parse_str($_POST['Values'],$output);"修改/转换"为php数组

$_POST['Values']看起来像这样:record_date%5B%5D=02.07.2013&record_date%5B%5D=01.07.2013

可能需要使用其他而不是parse_str

更新

如果在ajax中使用dataType: 'json',和php

foreach ($output as $key => $output_value) {
echo json_encode($output_value);
}

然后什么也得不到。

如果注释dataType: 'json',,请参见["02.07.2013","01.07.2013"]。

如果使用echo $output_value;而不是echo json_encode($output_value);,请参阅ArrayArrayArrayArrayArray的长列表。

如果在foreach内部使用var_dump($output_value);,则类似于此

array(2) { [0]=> string(1) "2" [1]=> string(1) "6" } 
...............
array(2) { [0]=> string(10) "02.07.2013" [1]=> string(10) "01.07.2013" }

似乎echo $output[$key][0]在前臂内侧做了必要的事情。。。

最后得出结论,必须使用这种代码

foreach ($output[record_date] as $key => $output_value) {
echo $output_value. ' output value<br>';
echo $output[other_name_from_html_input][$key]. ' output date selector value<br>';
}

parse_str()实际上可以满足您的需要。

parse_str($_POST['Values'], $output);
foreach ($output as $key => $output_value) {
    echo json_encode($output_value);
}

您的问题是不了解foreach循环是如何工作的。$output_value已经是当前迭代的数组元素的值,所以不需要将其用于索引。如果你想使用索引,你应该将它们与原始数组一起使用,如下所示:

foreach ($output as $key => $output_value) {
    echo json_encode($output[$key]);
}

仔细阅读:PHP:foreach

但有一点让我困惑。为什么要将序列化的表单数据作为单个值传递,而可以将其作为post数据本身传递?在这种情况下,您不需要使用parse_str(),您的代码如下:

JS:

var values = $("form").serialize();
$.ajax({
type: 'POST',
data: values,
dataType: 'json',

PHP:

foreach ($_POST as $value) {
    echo json_encode($value);
}