0

希望有人能理解这...

我对 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 循环,以显示每个带有一个复选框,该复选框将每个单元数组的复选框值增加一个。

$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++ . "];'

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

4

1 回答 1

0

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

如果专业人士可以阅读此答案并确认没问题,那就太好了。

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

第一个列表显示循环在实际网页上显示价格表:

包含您的数据文件后,例如:

<!--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++;
  }
?>

我希望这对其他初学者有用,因为我为此苦苦挣扎了好几天,但我无法弄清楚。

于 2013-04-11T15:37:29.423 回答