0

我有以下 HTML:

<input type="checkbox" name="plusfri[]" value="Fri"> Friday 
<input type="checkbox" name="plussat[]" value="Sat"> Saturday 
<input type="checkbox" name="plussun[]" value="Sun"> Sunday
<input type="checkbox" name="plusmon[]" value="Mon"> Monday

该帖子发布到以下PHP:

$plus = array(array("Name" => "", "Days" => "", "Age" => "","Conc" => ""));

    foreach($_POST['plusname'] as $k => $p)
    {
        $plus[$k]['Name'] = $p;
        $plus[$k]['Age'] = $_POST['plusage'][$k];
        $plus[$k]['Conc'] = $_POST['plusconc'][$k];
        $plus[$k]['Days'] = "X";
        if($_POST['plusfri'][$k]=="Fri") $plus[$k]['Days'] .= "1"; 
        if($_POST['plussat'][$k]=="Sat") $plus[$k]['Days'] .= "2"; 
        if($_POST['plussun'][$k]=="Sun") $plus[$k]['Days'] .= "3"; 
        if($_POST['plusmon'][$k]=="Mon") $plus[$k]['Days'] .= "4"; 
    }

我最终得到:

array(3) {
  [0]=>
  array(4) {
    ["Name"]=>
    string(6) "FRISAT"
    ["Days"]=>
    string(3) "X12"
    ["Age"]=>
    string(1) "1"
    ["Conc"]=>
    string(0) ""
  }
  [1]=>
  array(4) {
    ["Name"]=>
    string(6) "SATSUn"
    ["Age"]=>
    string(1) "1"
    ["Conc"]=>
    string(0) ""
    ["Days"]=>
    string(3) "X23"
  }
  [2]=>
  array(4) {
    ["Name"]=>
    string(6) "SUNMON"
    ["Age"]=>
    string(1) "1"
    ["Conc"]=>
    string(0) ""
    ["Days"]=>
    string(3) "X34"
  }
}

谁能告诉我为什么“Days”只在元素 [1] 和 [2] 上跳到最后??>

4

2 回答 2

1

这是因为你的循环。要获得相同的键顺序,您也应该以相同的顺序设置值,如下所示:

$plus = array(array("Name" => "", "Days" => "", "Age" => "","Conc" => ""));

foreach($_POST['plusname'] as $k => $p)
{
    $plus[$k]['Name'] = $p;
    $plus[$k]['Days'] = "X"; // <-- see ?
    $plus[$k]['Age'] = $_POST['plusage'][$k];
    $plus[$k]['Conc'] = $_POST['plusconc'][$k];
    if($_POST['plusfri'][$k]=="Fri") $plus[$k]['Days'] .= "1"; 
    if($_POST['plussat'][$k]=="Sat") $plus[$k]['Days'] .= "2"; 
    if($_POST['plussun'][$k]=="Sun") $plus[$k]['Days'] .= "3"; 
    if($_POST['plusmon'][$k]=="Mon") $plus[$k]['Days'] .= "4"; 
}
于 2013-05-22T10:20:01.370 回答
0

因为您声明了循环外的顺序,$plus[0]所以当您运行第一次循环迭代时,您将替换$plus[0]. 在随后的迭代中,因为您没有预先声明$plus[1]等,$plus[2]您将全新的变量分配给一个数组。

如果您想保留顺序,请尝试此操作:

$plus = array();

foreach($_POST['plusname'] as $k => $p)
{
    $plusChild = array("Name" => "", "Days" => "", "Age" => "","Conc" => "");
    $plusChild['Name'] = $p;
    $plusChild['Age'] = $_POST['plusage'][$k];
    $plusChild['Conc'] = $_POST['plusconc'][$k];
    $plusChild['Days'] = "X";
    if($_POST['plusfri'][$k]=="Fri") $plusChild['Days'] .= "1"; 
    if($_POST['plussat'][$k]=="Sat") $plusChild['Days'] .= "2"; 
    if($_POST['plussun'][$k]=="Sun") $plusChild['Days'] .= "3"; 
    if($_POST['plusmon'][$k]=="Mon") $plusChild['Days'] .= "4"; 
    $plus[$k] = $plusChild;
}

或者,您可以替换它:

$plus = array(array("Name" => "", "Days" => "", "Age" => "","Conc" => ""));

有了这个:

$plus = array(array("Name" => "", "Days" => "", "Age" => "","Conc" => ""),array("Name" => "", "Days" => "", "Age" => "","Conc" => ""),array("Name" => "", "Days" => "", "Age" => "","Conc" => ""));

但这只有在您知道您将始终获得三个回报时才有效。

于 2013-05-22T10:20:23.490 回答