2013-10-12 3 views
0

У меня есть этот PHP-код для вставки данных из моего;Нужно пропустить пропустить/игнорировать отсутствующий массив

$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 пробует ввести «» 2-й массив, который не существует, можно иметь в PHP пропустить/игнорировать "любые массивы, которые отсутствуют (массив неограниченны и любые случайные номер может отсутствовать)

+1

Да, но почему вы даже используете '$ i'? Вы делаете 'foreach ($ _ POST ['form'] как $ key => $ form), поэтому просто обращайтесь к' $ form' напрямую. – meagar

+0

Добавьте 'if (! Isset ($ _ POST ['form'] [$ i])) continue;' в самом начале внутри вашего цикла. Это то, чего вы хотите, но это не то, что вы должны делать. Читайте в ['foreach loop'] (http://php.net/manual/en/control-structures.foreach.php) – Leri

ответ

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']; 

    #... 
} 
2

В Еогеасп, вам не нужно использовать $i. $val - это ключ от подмассива. $form IS Подмассива и может быть использован в качестве:

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)); 

} 

Таким образом, чтобы ответить на ваш вопрос, Еогеасп никогда не достигает недостающую массив. Он перемещается по элементам массива, и поэтому, если массив имеет два элемента, он будет выполнять итерацию два раза. Если массив имеет три элемента, он будет выполнять итерацию 3 раза и так далее.

Смежные вопросы