Php $\u在foreach循环内更改或消失POST值

Php $\u在foreach循环内更改或消失POST值,php,post,foreach,Php,Post,Foreach,在此之前,foreachloop$\u POST['encounterName']包含预定义的名称。在循环内部,其值更改为“.json”,因此文件\u put\u contents中的第一个字符串为“.json.json”。以及$\u POST['basicTrainingSectionSlide'],$\u POST['basicTrainingContentHeader'],以及 $\u POST['basicTrainingContentText']将丢失它们的值。经过foreach循环后

在此之前,
foreach
loop
$\u POST['encounterName']
包含预定义的名称。在循环内部,其值更改为“.json”,因此文件\u put\u contents中的第一个字符串为“.json.json”。以及
$\u POST['basicTrainingSectionSlide']
$\u POST['basicTrainingContentHeader']
,以及
$\u POST['basicTrainingContentText']
将丢失它们的值。经过
foreach
循环后,所有值都恢复正常。这里发生了什么

$i = 0;
$j = 0;

foreach($_POST['Sections'] as $order){

    if(strcmp($order, "Section") == 0){
        file_put_contents($_POST['encounterName'].".json", "\t\t[\n", FILE_APPEND);
        file_put_contents($_POST['encounterName'].".json", "\t\t\t\"Section\",\n", FILE_APPEND);
        file_put_contents($_POST['encounterName'].".json", "\t\t\t\"".$_POST['basicTrainingSectionSlide'][$i]."\"\n", FILE_APPEND);
        file_put_contents($_POST['encounterName'].".json", "\t\t],\n", FILE_APPEND);
        $i++;
    }
    else if(strcmp($order, "Text") == 0){
        file_put_contents($_POST['encounterName'].".json", "\t\t[\n", FILE_APPEND);
        file_put_contents($_POST['encounterName'].".json", "\t\t\t\"Text\",\n", FILE_APPEND);
        file_put_contents($_POST['encounterName'].".json", "\t\t\t\"".$_POST['basicTrainingContentHeader'][$j]."\"\n", FILE_APPEND);
        file_put_contents($_POST['encounterName'].".json", "\t\t\t\"".$_POST['basicTrainingContentText'][$j]."\"\n", FILE_APPEND);
        file_put_contents($_POST['encounterName'].".json", "\t\t],\n", FILE_APPEND);
        $j++;       
    }

}
这是$\u post数组包含的内容:

array(11) { ["encounterName"]=> string(8) "Violence" ["encounterHint"]=> string(0) "" ["basicTrainingSectionSlide"]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "6" } ["basicTrainingContentHeader"]=> array(2) { [0]=> string(1) "2" [1]=> string(1) "4" } ["basicTrainingContentText"]=> array(2) { [0]=> string(1) "3" [1]=> string(1) "5" } ["contextText_1"]=> string(0) "" ["contextText_2"]=> string(0) "" ["contextText_3"]=> string(0) "" ["contextText_4"]=> string(0) "" ["contextText_5"]=> string(0) "" ["submit_form"]=> string(6) "Submit" } array(11) { ["encounterName"]=> string(8) "Violence" ["encounterHint"]=> string(0) "" ["basicTrainingSectionSlide"]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "6" } ["basicTrainingContentHeader"]=> array(2) { [0]=> string(1) "2" [1]=> string(1) "4" } ["basicTrainingContentText"]=> array(2) { [0]=> string(1) "3" [1]=> string(1) "5" } ["submit_form"]=> string(6) "Submit" }
一些补充信息: -填写的表单将其post数据发送到单独的php文件进行处理。 -
$\u POST['Sections']
通过以下功能发送:

function returnValues() {
    $.ajax({
        type: "POST",
        url: "final.php",
        data:{ Sections: $sectionOrder }, 
        success: function(data){
            console.log(data); 
        }
    })
}

从表单标记的提交上的.js文件。

假设
$\u POST['Sections']
包含以下内容:

array(11) { 
    ["encounterName"]=> string(8) "Violence" 
    ["encounterHint"]=> string(0) ""
    ["basicTrainingSectionSlide"]=> array(2) { 
        [0]=> string(1) "1" 
        [1]=> string(1) "6" } 
    ["basicTrainingContentHeader"]=> array(2) { 
        [0]=> string(1) "2" 
        [1]=> string(1) "4" } 
    ["basicTrainingContentText"]=> array(2) { 
        [0]=> string(1) "3" 
        [1]=> string(1) "5" } 
    ["contextText_1"]=> string(0) "" 
    ["contextText_2"]=> string(0) "" 
    ["contextText_3"]=> string(0) "" 
    ["contextText_4"]=> string(0) "" 
    ["contextText_5"]=> string(0) "" 
    ["submit_form"]=> string(6) "Submit" 
}
array(11) { 
    ["encounterName"]=> string(8) "Violence" 
    ["encounterHint"]=> string(0) "" 
    ["basicTrainingSectionSlide"]=> array(2) { 
        [0]=> string(1) "1" 
        [1]=> string(1) "6" } 
    ["basicTrainingContentHeader"]=> array(2) { 
        [0]=> string(1) "2" 
        [1]=> string(1) "4" } 
    ["basicTrainingContentText"]=> array(2) { 
        [0]=> string(1) "3" 
        [1]=> string(1) "5" } 
    ["submit_form"]=> string(6) "Submit" 
}
我会这样做:

$i = 0;
$j = 0;

foreach($_POST['Sections'] as $order){
    $fn = $order['encounterName'] . ".json";
    $appText = "";
    if(strcmp($order, "Section") == 0){  
        $appText .= "\t\t[\n";
        $appText .= "\t\t\t\"Section\",\n";
        $appText .="\t\t\t\"" . $order['basicTrainingSectionSlide'][$i] . "\"\n";
        $appText .= "\t\t],\n";
        file_put_contents($fn, $appText, FILE_APPEND);
        $i++;
    } elseif(strcmp($order, "Text") == 0){
        $appText .= "\t\t[\n";
        $appText .= "\t\t\t\"Text\",\n";
        $appText .= "\t\t\t\"" . $order['basicTrainingContentHeader'][$j] . "\"\n";
        $appText .= "\t\t\t\"" . $order['basicTrainingContentText'][$j] . "\"\n";
        $appText .= "\t\t],\n";
        file_put_contents($fn, $appText, FILE_APPEND);
        $j++;       
    }
}
由于您处于一个
foreach
循环中,并在数组上迭代
$\u POST['Sections']
,要调用该数组的元素,需要使用
$order
。这就是您定义循环的方式。您一直在调用$\u POST,这些索引不应该存在

如果您使用的是$\u POST,则第一次出现的
encounterName
将位于
$\u POST['Sections'][0]['encounterName']
,并将包含字符串
暴力
。因此,在循环中,
$fn=$order['encounterName'].“.json”
应作为字符串分配
暴力.json

我不确定
if
语句在寻找什么。由于
$order
是一个数组,而不是字符串,
strcmp()
应该返回
NULL
。见附注。由于两个
if
语句都会失败,因此在这两种情况下都不会追加文件。如果你想澄清这一点,请发表评论

我对以下内容进行了测试:


此代码未经测试。

那么,为什么第一个块是
[$i]
,而另一个块是
[$j]
?为什么要手动构建json?那真是太蠢了。。。有
json\u encode()
可以自动为您完成所有这些,并且有很多方法可以预先打印它生成的内容。这必须是一个非常特定的顺序,我不能只转储这些内容。但是是的,我会通过这个来研究方括号的东西。首先,我需要这个。所有部分[]的大小是$I+$j,但它们的顺序是随机的,这取决于$order的值。当您多次打开和关闭文件时,请查看
fopen
fwrite
,这是不需要的。如果没有一些示例
$\u POST
数据,我们无法测试此代码。您能否编辑您的帖子以包含供我们使用的
var\u转储($\u post)
<?php
    $order = array();
    if(strcmp($order, "Section")){
        echo "Success";
    } else {
        echo "Fail";
    }
?> 
E_WARNING : type 2 -- strcmp() expects parameter 1 to be string, array given -- at line 5
Fail