0

我有这个 php 代码用于从我的 from 中插入数据;

$i = 1;
foreach ( $_POST['form'] as $val => $form ){   
    $Style = $_POST['form'][$i]['style'];
    $Dim= $_POST['form'][$i]['Dim'];
    $Colour= $_POST['form'][$i]['Colour'];
    $Quantity= $_POST['form'][$i]['Quantity'];

    $stmt = $db->prepare("INSERT INTO orders(Cus_ID, Style, Dimensions, Colour, Quantity) VALUES(:Cus_ID,:Style,:Dimensions,:Colour,:Quantity)");

    $stmt->execute(array(':Cus_ID' => $Cus_ID, ':Style' => $Style, ':Dimensions' => $Dim, ':Colour' => $Colour, ':Quantity' => $Quantity));  

    $i++;
} 

当我提交我的表单时,一个 var_dump 给我这样的东西;

array (size=3)
  'form' => 
    array (size=3)
      1 => 
        array (size=4)
          'style' => string '0' (length=1)
          'Dim' => string '0' (length=1)
          'Colour' => string '0' (length=1)
          'Quantity' => string '' (length=0)
      2 => 
        array (size=4)
          'style' => string '0' (length=1)
          'Dim' => string '0' (length=1)
          'Colour' => string '0' (length=1)
          'Quantity' => string '' (length=0)
      3 => 
        array (size=4)
          'style' => string '0' (length=1)
          'Dim' => string '0' (length=1)
          'Colour' => string '0' (length=1)
          'Quantity' => string '' (length=0)
  'submit' => string 'Place Order' (length=11)

一切都很好,花花公子,但是当我删除部分表单时,提交的数组最终会变成这样;

array (size=2)
  'form' => 
    array (size=2)
      1 => 
        array (size=4)
          'style' => string '0' (length=1)
          'Dim' => string '0' (length=1)
          'Colour' => string '0' (length=1)
          'Quantity' => string '' (length=0)
      3 => 
        array (size=4)
          'style' => string '0' (length=1)
          'Dim' => string '0' (length=1)
          'Colour' => string '0' (length=1)
          'Quantity' => string '' (length=0)
  'submit' => string 'Place Order' (length=11)

php尝试输入不存在的“第二个”数组,是否可以让php“跳过/忽略”任何丢失的数组(数组是无限的,任何随机数都可能丢失)

4

2 回答 2

3

是的,这是可能的,只要continue当前索引没有设置。

但是,您根本没有理由使用它$i。您的foreach循环被编写为让您可以访问每个表单$form,因此只需使用$form

foreach ( $_POST['form'] as $val => $form ){  
    # No! 
    $Style = $_POST['form'][$i]['style'];
    $Dim   = $_POST['form'][$i]['Dim'];

    # Yes!
    $Style = $form['style'];
    $Dim   = $form['Dim'];

    #...
}
于 2013-10-12T13:08:38.740 回答
2

在 foreach 中,您不需要使用$i. $val是子数组的键。$form是子数组,可以用作:

foreach ( $_POST['form'] as $val => $form ){   
    $Style = $form['style'];
    $Dim= $form['Dim'];
    $Colour= $form['Colour'];
    $Quantity= $form['Quantity'];

    $stmt = $db->prepare("INSERT INTO orders(Cus_ID, Style, Dimensions, Colour, Quantity) VALUES(:Cus_ID,:Style,:Dimensions,:Colour,:Quantity)");

    $stmt->execute(array(':Cus_ID' => $Cus_ID, ':Style' => $Style, ':Dimensions' => $Dim, ':Colour' => $Colour, ':Quantity' => $Quantity));  

}

因此,要回答您的问题, foreach 永远不会到达丢失的数组。它循环遍历数组元素,因此,如果数组有两个元素,它将迭代两次。如果数组有三个元素,它将迭代 3 次,依此类推。

于 2013-10-12T13:11:01.627 回答