Как удалить последнее значение в цикле foreach - PullRequest
0 голосов
/ 24 мая 2018

У меня динамический мульти вход.При отправке формы, вставка значений массива.Но я хочу вставить без значения 'submit'.Это цикл foreach (sql secure не включен)

if (isset($_POST['submit'])) {
    $nearest = $db->prepare('insert into nearest set place=?, distance=?');
    $i = 0;
    foreach ($_POST as $val) {
        $place = $_POST['place'][$i];
        $distance = $_POST['distance'][$i];
        $nearest->execute([$place, $distance]);
        $i++;
    }
}

Этот цикл вставил значения '$ _POST' и вставил пустую строку.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вы можете просто удалить свой ключ submit из $_POST перед выполнением цикла с обычным unset().Но это плохой подход.Вместо этого я бы порекомендовал вместо этого «изолировать» ваши данные, а вместо этого:

<input name="distance" ... >

сделать все ваши выводы следующим образом:

<input name="data[distance]" ... >

тогда вам просто нужночтобы перебрать массив «data» (имя, как вам нравится):

foreach($_POST['data'] as val)

Кроме того, воздержитесь от удаления последнего элемента в шторке, потому что он основан на ложном предположении, что это всегда ваш элемент «submit».Что, если вы добавите больше кнопок отправки в форму?или порядок изменится?

0 голосов
/ 24 мая 2018

Если вы хотите сохранить цикл, вы можете использовать array_slice, чтобы не включать последний элемент в цикл.
Array_slice будет принимать элементы от 0 (не буквальный, но первый элемент) до второго до последнего (-1).
http://php.net/manual/en/function.array-slice.php

РЕДАКТИРОВАТЬ;Я думаю, что вам нужен цикл for для циклического подсчета "места".

if (isset($_POST['submit'])) {
  $nearest= $db -> prepare('insert into nearest set place=?, distance=?');
  for($i=0; $i< count($_POST['place']; $i++){
      $place = $_POST['place'][$i];
      $distance= $_POST['distance'][$i];
      $nearest-> execute([$place , $distance]);
      $i++;
  }
}

пример: https://3v4l.org/F47ui

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...