Связать ID с элементами ввода - PullRequest
0 голосов
/ 19 марта 2020

Мне было интересно, что будет лучшим способом или подходом для достижения sh этого. У меня есть строка таблицы с двумя столбцами в качестве входных данных. Мне нужно связать идентификатор с элементами ввода, чтобы при отправке формы я мог определить, к какой строке принадлежит вход. Это то, что у меня есть.

<tr>
    <td><input type="hidden" name="id[]" value="252748"> Tue - Mar 3rd 3:03 PM</td>
    <td>
        <select class="form-control" name="notes[]">
            <option value="Parent Cancel" selected="">Parent Cancel</option>
            <option value="COVID-19">COVID-19</option>
        </select>
    </td>
    <td><input class="form-control" type="tel" name="hours[]" value="0"></td>
</tr>
<tr>
    <td><input type="hidden" name="id[]" value="253081"> Wed - Mar 4th 2:03 PM</td>
    <td>
        <select class="form-control" name="notes[]">
            <option value="Parent Cancel" selected="">Parent Cancel</option>
            <option value="COVID-19">COVID-19</option>
        </select>
    </td>
    <td><input class="form-control" type="tel" name="hours[]" value="0" readonly=""></td>
</tr>

Table

Если я сделаю это и отправлю форму, то получу 3 массива: один для идентификатора , заметки и часы. Как я могу связать удостоверение с соответствующими заметками и часами. Или есть лучший способ сделать это?

Большое спасибо!

enter image description here

РЕДАКТИРОВАТЬ ***

$count = $_POST['rows'];

for($i = 0; $i < $count; $i++)
{

    echo 'id ' . $_POST['id'][$i] . ' Notes ' . $_POST['notes'][$i] . ' Hours ' . $_POST['hours'][$i] . '<br>';

}

1 Ответ

0 голосов
/ 19 марта 2020

Учитывая, что индексы каждой "строки" совпадают, вы можете l oop над ними и объединить их в новый массив, который будет более согласованным, например:

$arr = [
    'id' => [
        0 => 123,
        1 => 456,
        2 => 789,
    ],
    'notes' => [
        0 => 'Parent Cancel',
        1 => 'COVID-19',
        2 => 'Parent Cancel',
    ],
    'hours' => [
        0 => 0,
        1 => 1,
        2 => 0,
    ],
];

$newArr = [];
foreach ($arr['id'] as $index => $id) {
    $newArr[$id] = [
            'notes' => $arr['notes'][$index],
            'hours' => $arr['hours'][$index],
    ];
}

var_export($newArr);

output:

array (
  123 =>
  array (
    'notes' => 'Parent Cancel',
    'hours' => 0,
  ),
  456 =>
  array (
    'notes' => 'COVID-19',
    'hours' => 1,
  ),
  789 =>
  array (
    'notes' => 'Parent Cancel',
    'hours' => 0,
  ),
)

Обратите внимание, что это работает только до тех пор, пока все индексы всегда (без пробелов) - что должно быть в случае с вашим текущим HTML.

Альтернативный подход будет поставить идентификатор (целое число) в качестве индекса в полях ввода, однако это все равно оставит вас с двумя массивами, которые вам все равно придется объединять (один для заметок и один для часов). Так что это точно не облегчит имхо.

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