将脚本生成的复选框值设置为多维数组

时间:2013-04-08 10:54:50

标签: php multidimensional-array submit

希望有人能理解这一点......

我仍然是非常新的PHP,我被卡住了。

我有一个问题...... 我有一个包含由foreach循环生成的复选框的列表,每个框应该有一个多维数组作为它的值。

<input type='checkbox' name='unit[]' value='multidimensional array' />

我有一个包含这样的数组的文件:

$disclaimer = disclaimer;
$unit = array(
//EXTRAS
"0" => array("key0_key0" => "<h1>key0_key0_VALUE</h1>",
         "key0_key1" => "<li>key0_key1_VALUE</li>",
         "key0_key2" => "<li>key0_key2_VALUE</li>",
         "key0_key3" => "<li>key0_key3_VALUE</li>",
         "key0_key4" => "<li>key0_key4_VALUE</li>",                  
         "key0_key5" => "<li>key0_key_VALUE</li>",

         "key0_key6" => array("key0_key6_key1" => "<h1>key0_key6_key1_VALUE</h1>",
                              "key0_key6_key2" => "<li>key0_key6_key2_VALUE</li>"
                                                         ),
                                        ),
                  ),

//UNIT 1
"1" => array("key1_key0" => "<h1>key1_key0_VALUE</h1>",
         "key1_key1" => "<li>key1_key1_VALUE</li>",
         "key1_key2" => "<li>key1_key2_VALUE</li>",
         "key1_key3" => "<li>key1_key3_VALUE</li>",
         "key1_key4" => "<li>key1_key4_VALUE</li>",                  
         "key1_key5" => "<li>key1_key_VALUE</li>",

         "key1_key6" => array("key1_key6_key1" => "<h1>key1_key6_key1_VALUE</h1>",
                              "key1_key6_key2" => "<li>key1_key6_key2_VALUE</li>"
                                                         ),
                                        ),
                  ),    
//UNIT 2
"2" => array("key2_key0" => "<h1>key2_key0_VALUE</h1>",
         "key2_key1" => "<li>key2_key1_VALUE</li>",
         "key2_key2" => "<li>key2_key2_VALUE</li>",
         "key2_key3" => "<li>key2_key3_VALUE</li>",
         "key2_key4" => "<li>key2_key4_VALUE</li>",                  
         "key2_key5" => "<li>key2_key_VALUE</li>",

         "key2_key6" => array("key2_key6_key1" => "<h1>key2_key6_key1_VALUE</h1>",
                              "key2_key6_key2" => "<li>key2_key6_key2_VALUE</li>"
                                                         ),
                                        ),
);

我将这些包含在一个单独的包含文件中,其中包括我可能需要显示的文件。

然后在我的页面上我有这个包含一个foreach循环,然后显示每个复选框,每个单元数组的复选框值增加1。

$i = 0;

foreach($unit as $unit_no){
echo"<div class='pricelist-container'>";

if (is_array($unit_no)){

    foreach ($unit_no as $unit_details){

        if (is_array($unit_details)) {

            foreach ($unit_details as $unit_contents){

                if (is_array($unit_contents)){

                    foreach ($unit_contents as $extra){
                        echo $extra;
                    }
                }
                else{
                    echo $unit_contents;
                }
            }
        }

        else{
            echo $unit_details;
        }
    }
}
else{
    echo $unit_no;
}
echo"
$disclaimer
//below is where my problem seems to start.
<p class='fine'> <input type='checkbox' name='unit[]' value='" . "$" . "unit" . "[" . $i++ . "];' checked='checked' /> please uncheck to remove list</p>
<br />
</div>";
}

这是我的问题,因为我拥有它......但是因为我很陌生,所以我可能会非常错误。

我需要这些复选框来生成$ var [key]作为值,然后在提交表单后,它需要能够将这些变量传递到新页面,我再次包含数组文件,这样我就可以循环选中的复选框并在候选名单上再次显示。但我不能让代码以这样一种方式,我需要添加一些小循环来回应这些单元中的每一个每次添加到包含文件时因为我将这个包含文件转换为数据库文件并创建一个上传页面网站所有者无需编辑任何内容即可创建自己的新单元。

if(isset($_POST['unit'])){
            if (is_array($_POST['unit'])){
                foreach ($_POST['unit'] as $print_unit){
                    echo $print_unit;
                }
            }
        }
//this loop will echo out the $var[key] as strings. 

上面的foreach将以字符串形式回显$ var,而不是带有递增键的$ var。

它基本上是一个产品列表,其中包含数组中每个产品的内容,以及从可打印列表中添加或删除它们的复选框。一切都有效,除了创建复选框值......

value='" . "$" . "unit" . "[" . $i++ . "];'

这将为我在include中的每个数组创建名称$ unit [1],但它会生成一个字符串$ unit [1]但不是实际的数组,它是第一个键。

1 个答案:

答案 0 :(得分:0)

我的一位朋友帮助我解决了这个问题,我将尽我所能用自己有限的知识回答我自己的问题。

如果PRO能够阅读这个答案并确认它没问题,那将会很棒。

ARRAY SETUP保存在包含文件中,例如(data.php):

$Number = 1;

$unit[$Number]['id']="id";
$unit[$Number]['img']="image";
$unit[$Number]['name']="name";
$unit[$Number]['price']=00.00;
$unit[$Number]['contents'][1]="content1";
$unit[$Number]['contents'][2]="content2";
$unit[$Number]['contents'][3]="content3";
$unit[$Number]['contents'][4]="content4.";

$Number = 2;

$unit[$Number]['id']="id";
$unit[$Number]['img']="image";
$unit[$Number]['name']="name";
$unit[$Number]['price']=00.00;
$unit[$Number]['contents'][1]="content1";
$unit[$Number]['contents'][2]="content2";
$unit[$Number]['contents'][3]="content3";
$unit[$Number]['contents'][4]="content4.";

//END OF PRODUCT/UNIT ARRAYS

First List Display Loop在实际网页上显示价目表:

包含您的数据文件 例如:

<!--OPEN FORM-->
<form method='post' action='SCRIPT FILE NAME.php'>

<?php 

  include('data.php'); 

  /*Set INCREMENT.*/
   $i = 1;

  /*DISPLAY LOOP*/
   foreach ($unit as $UNIT) 
   //ECHO SOME HTML FOR A LAYOUT CONTAINER DIV
     echo "<div class='####'>";
     //image
     echo "<img class='#' src='location_folder_details/".$UNIT['img']."'>";
     //name
     echo $UNIT['name'];
     //price
     echo "Dollar/Pound symbol".number_format ($UNIT['price'] , 2, '.' , ' ' );
     //contents

     //SECOND ARRAY LOOP FOR CONTENT
       if (is_array($UNIT['contents'])){
         foreach ($UNIT['contents'] as $unit_contents){
           echo "<li>".$unit_contents."</li>"; 
          }
        }
        else {
          echo "NO DETAILS AVAILABLE";
        }

     echo "<p class='fine' ><input type='checkbox' name='unit_$i' value='".$UNIT['id']."' checked='checked'> please uncheck to remove.</p>";
  //CLOSE HTML LAYOUT CONTAINER DIV.
   echo "</div>";
  //Increment $i
   $i ++;
  }
  //ADD HIDDEN FIELD TO REMEMBER INCREMENT 
   echo "<input type='hidden' name='count' value='$i'>";
?>

<!--ADD SUBMIT AND END FORM-->
 <input class='send' action='###.php' type='submit' name='NAME' value='SUBMIT'  />
 </form>

然后如何处理它

//ADD INCLUDE FILE 
include ('data.php');

//POST HIDDEN COUNT FIELD
$count = $_POST['count'];
//RE-SET INCREMENT 
$i = 1;

<?php    
  while ($i < $count){
    $var_name = "unit_$i";

  if (isset($_POST[$var_name])) {
    // The tickbox "value", is the UNIT ID... Check include.php
      $unit_id = $_POST["$var_name"];

  foreach ($unit as $UNIT) {
        if ($UNIT['id'] == $unit_id) {
      //HTML LAYOUT ECHO
           echo "<div class='####'>";
      //image
           echo "<img class='####' src='LOCATION/PATH/".$UNIT['img']."'>";
      //name
       echo $UNIT['name'];
      //price
        echo "DOLLAR/POND SYMBOL".number_format ($UNIT['price'] , 2, '.' , ' ' );

      //SECOND ARRAY LOOP FOR CONTENT
           if (is_array($UNIT['contents'])){
             foreach ($UNIT['contents'] as $unit_contents){
              //CONTENTS
               echo "<li>".$unit_contents."</li>"; 
                  }
           }
           else {
             echo "NO DETAILS AVAILABLE";
           }
           //HTML LAYOUT ECHO
             echo "</div>";
          }

        }
    }
    $i++;
  }
?>

我希望这对其他初学者有用,因为我几天都在努力解决这个问题,我无法理解。