Если это кому-нибудь пригодится, я выкладываю свое решение здесь.
Мне удалось решить эту проблему с помощью «Параллельные двумерные массивы».
Это просто трюк. Вы создаете 2D массив для отображения данных. Таким образом, у вас есть массив для каждой строки в таблице. Например, если столбцы «Год 2006», «Год 2007» и «Год 2008», как в моем вопросе выше. Вы создадите строку данных со значением для каждого года.
$data_for_row_array = array('10', '15', '35');
Таким образом, вы создаете массив данных для каждой строки в вашей таблице и получаете массив строк:
$rows_array = array(data_for_row_1_array, data_for_row_2_array, ..) etc
Это будет сделано для массива отображения. Теперь, если вы хотите захватить пользовательский ввод для каждой из этих ячеек в таблице, все, что вам нужно сделать, это создать аналогичный второй 2D-массив с идентификаторами каждой ячейки данных, взятой из база данных .. если идентификатор еще не существует, просто оставьте его пустым. И когда пользователь вводит данные и отправляет их, просто переберите два 2D-массива и используйте идентификатор из одного массива и данные из другого массива, чтобы сопоставить их. потому что в обоих массивах совпадающий идентификатор и его значение данных будут в одной и той же позиции. Поэтому, если вы найдете и «ID» в «массиве идентификаторов», и значение данных в той же позиции в «массиве данных», вы просто используете его для обновления таблицы базы данных. Это концепция «параллельных двумерных массивов».
И если вы найдете пустое значение идентификатора в массиве идентификаторов, все же какое-то значение данных в той же позиции в массиве данных означает, что пользователь ввел совершенно новое значение, поэтому вы сохраняете его как новую ячейку данных в базе данных.
Надеюсь, это даст вам некоторое представление ... если неясно, просто дайте мне знать, и я объясню это более подробно.