Intereting Posts
Как заменить все пробелы внутри элементов HTML на & nbsp; используя preg_replace? Сортировка массива слов – неанглийские буквы + двойные буквы символов PHP Как вы отлаживаете тестовый файл PHP в Netbeans? Объединение регулярного выражения для проверки номера телефона в Великобритании и США Использование Webservice для отправки имени пользователя и пароля с PHP на JAVA Api Обработка ошибок Mysql / Try catch php обрезать строку SendGrid для PHP работает медленно. Возможны ли неблокирующие запросы? Визуальный Composer пользовательский шаблон короткого кода – custom_markup отображение пользовательского ввода Как удалить все таблицы в базе данных, не отбрасывая сама база данных? JWT API с Laravel, не может читать заголовок обновления токена на клиенте Сканирование файлов в каталоге и подкаталоге и сохранение их пути в массиве с помощью php неожиданный $ end Прогресс загрузки сеанса PHP EMPTY SELECT и список дочерних и родительских

Получить все переменные $ _POST, начиная с определенного текста

У меня есть html-форма с секцией, которая генерирует входы со случайными именами.

Каждое имя ввода генерируется с текстом «книга» в начале и случайным текстом в конце.

<input type="text" name="book_4552f" /> <input type="text" name="book_3507p" /> <input type="text" name="book_8031b" /> 

Как использовать PHP для получения всех переменных $ _POST, которые начинаются с текста «книга»?

Следующее использует strpos (), чтобы проверить, что строка POST начинается с book_

 foreach($_POST as $key => $value) { if (strpos($key, 'book_') === 0) { // value starts with book_ } } 
 foreach($_POST as $key => $value) { if(preg_match('@^book_@', $key)) { $books[$key] = $value; } } 

Существует несколько возможностей

Сначала: (сплит-ключ)

  $result = array(); foreach($_POST AS $k=>$v) { //Explode k (book_*) into an array with max 2 values $k_array = explode("_", $k, 2); if(isset($k_array[0]) && $k_array[0] == "book") { $result[$k] = $v; } } 

Или с preg_match, как и выше, но есть также веская причина, по которой вам может понадобиться только последняя часть k = например book_8031b только 8031b

 $result = array(); foreach($_POST AS $k=>$v) { if(preg_match("/^book_(.*)$/", $k, $matches)) { $result[$matches[1]] = $v; } }