2013-04-08 77 views
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]作为值,然后在提交表单后它需要能够将这些变量传递到一个新的页面,我再次包含数组文件,这样我就可以循环通过选中的框并在候选名单上再次显示。但我无法以这种方式添加代码,因此每次添加到include文件时都需要添加小循环来回显这些单元中的每一个。因此,我会将此包含文件转换为数据库文件并创建上载页面为网站所有者创建他/她自己的新单元,而无需编辑任何内容以在网站上显示。

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

这将创建名为$单元[1]为每个数组我已经在包括但它会产生一个字符串$单元[1]但不是作为一个实际的数组,它是第一个关键。

+0

change'value ='“。”$“。”unit“。”[“。$ i ++。”];''to'value ='“。$ unit [$ i ++]。''' – 2013-04-08 11:00:46

+0

Thanx @ coramba。它现在通过阵列:) 现在,我需要弄清楚的是循环再次呼应它... – RFZees 2013-04-08 11:12:36

+0

好吧然后... 所以它传递数组(告诉我在源代码中它是一个数组),但我不能回显出于某种原因再次传出数组? 它只回应“ARRAY”这个词。 CODE用于ECHO 如果(isset($ _ POST [ '单元'])){ 如果(is_array($ _ POST [ '单元'])){ 的foreach($ _POST [ '单元']为$ print_unit如果(is_array($ print_unit)){foreface($ print_unit as $ P_unit){ echo $ P_unit; } } else { echo“NOT ARRAY
”; } } } } – RFZees 2013-04-08 11:34:32

回答

0

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

如果一个PRO可以只读这个答案并确认它是确定的,那将是非常棒的。将数组保存在包含文件中,例如(数据。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++; 
    } 
?> 

我希望这会对其他初学者有用因为我挣扎这与数天编辑,我无法弄清楚。