【问题标题】:Multidimensional array looping PHP多维数组循环PHP
【发布时间】:2011-12-14 08:37:48
【问题描述】:

由于某种原因,我无法设置循环时间,因为我正在使用 jQuery 动态生成表单。我已经对该主题进行了一些研究,通常会使用foreach 循环所有有效字段,但我不知道如何做这些:

<form action="testing.php" method="post" >
<input type="text" name="product[1][name]" value="product1"/>
<input type="text" name="product[1][color][]"  value="product1color1"/>
<input type="text" name="product[1][color][]"  value="product1color2"/>
<input type="text" name="product[1][color][]"  value="product1color3"/>

<input type="text" name="product[2][name]" value="product2"/>
<input type="text" name="product[2][color][]"  value="product2color1"/>

<input type="text" name="product[3][name]" value="product3"/>
<input type="text" name="product[3][color][]"  value="product3color1"/>


<input type="text" name="product[4][name]" value="product4"/>
<input type="text" name="product[4][color][]"  value="product4color1"/>

<input type="submit" />

我的测试代码最终变成了这样,它不起作用.=(

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 

$product=$_POST['product'];
//store everything that start with product into array


   foreach($product as $key){
   //loop for product.1 product.2 and so on.....

      //echo name of current product
      echo $product[$key]['name'];

          foreach($product[$key]['color'][] as $point){
          echo $point;
          }//loop for every single available color field

   }//end of product loop
}// end of post request

?>

【问题讨论】:

  • 用 foreach($key['color'] as $point) 更正了 foreach($product[$key]['color'][] as $point)

标签: php arrays dynamic multidimensional-array foreach


【解决方案1】:

$product = $_POST['product']; 语句会将 HTML 表单中的数据排列成一个多维数组,如下所示:

Array(
    1 => Array(
        "name" => "product1",
        "color" => Array(
            0 => "product1color1",
            1 => "product1color2",
            2 => "product1color3"
        )
    ),
    2 => Array(
        "name" => "product2",
        "color" => Array(
            0 => "product2color1"
        )
    ),
    ...
)

要迭代这个数组,你需要做:

foreach($product as $key1 => $prd) {
    echo $prd['name'];
    foreach($prd['color'] as $key2 => $point) {
        echo $point;
    }
}

在每次传递中,$key1 将包含数组键 (1, 2, 3),而 $prd 将包含与该键关联的项目 ($product[1], $product[2], $product[3])。如有必要,您可以完全省略 $key =&gt; 部分。内循环也是如此。

【讨论】:

  • 感谢指正!嗯,我对编程世界很陌生,只是另一个问题,这些是处理数据的正确方法吗?
  • 这是处理您在问题中发布的数据的一种方法:)
【解决方案2】:

你的代码应该是这样的

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

$product=$_POST['product'];
//print_r($_POST['product']);
//store everything that start with product into array


for($i=0; $i<count($product); $i++){
//   foreach($product as $key){
   //loop for product.1 product.2 and so on.....

      echo "<br/> &nbsp;".$product[$i]['name'];


      for($j=0; $j<count($product[$i]['color']); $j++){
//      foreach($product[$key]['color'][] as $point){
          echo "<br/> &nbsp;&nbsp;".$product[$i]['color'][$j];
          }//loop for every single available color field


   }//end of product loop
}// end of post request

【讨论】:

    猜你喜欢
    • 2013-06-25
    • 2019-07-17
    • 2012-05-13
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 2012-04-21
    相关资源
    最近更新 更多