#php #arrays #wordpress #preg-split
#php #массивы #wordpress #preg-split
Вопрос:
Я использую плагин WordPress под названием Грозные формы, но это не должно быть препятствием для этого вопроса.
Есть PHP-хук (https://formidableforms.com/knowledgebase/frm_setup_new_fields_vars/#kb-dynamically-populate-checkbox-field ), который позволяет вам заполнять поля флажков динамически, принимая параметры URL и добавляя их в поля флажков в качестве значений. Отлично. Но если у вас более одной записи на параметр, как у меня, он добавляет весь массив / строку (я перепутал) в качестве одного значения флажка.
Например, мой параметр URL amp;srch_main=one, two, three
равен . Это добавляет поле флажка со значением «один, два, три».
Я пытаюсь найти способ динамического создания трех полей из этого (массива), чтобы первое поле было «одним», второе поле было бы двумя и так далее.
Я немного отредактировал код из приведенной выше ссылки:
add_filter('frm_setup_new_fields_vars', 'frm_set_checked', 20, 2);
function frm_set_checked($values, $field){
if($field->id == 390){//Replace 125 with the ID of your field
$values['options'] = array($_GET['srch_main'], $_GET['srch_own']); //Replace Option1 and Option2 with the options you want in the field
}
return $values;
}
То, что я хотел бы сделать, это что-то вроде $_GET['srch_main'][0]
: $_GET['srch_main'][1]
напечатать 1-ю, 2-ю, 3-ю и т.д. записи параметра, чтобы заполнить каждую как отдельное значение в поле флажка. Это редактирование для меня дает 1-ю букву и вторую позже в качестве отдельных входных данных в поле, но не слово или фразу, разделенные запятой и пробелом.
Спасибо за предложение от @EL_vanja ниже использовать explode. Это имеет смысл использовать, но моя реализация нарушает форму:
add_filter('frm_setup_new_fields_vars', 'frm_set_checked', 20, 2);
function frm_set_checked($values, $field){
if($field->id == 390){//Replace 125 with the ID of your field
$values['options'] = array($_GET['srch_main'], $_GET['srch_own']); //Replace Option1 and Option2 with the options you want in the field
}
// $pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
//echo $pieces[0]; // piece1
//echo $pieces[1]; // piece2
$exercises = explode(", ", $values);
echo $exercises[0];
echo $exercises[1];
echo $exercises[2];
echo $exercises[3];
}
Решено
Проблема решена с помощью El_Vanja путем разрыва строки. Большое спасибо.
add_filter('frm_setup_new_fields_vars', 'frm_set_checked', 20, 2);
function frm_set_checked($values, $field){
if($field->id == 390){//Replace 125 with the ID of your field
$values['options'] = explode(', ',$_GET['srch_main']); //Replace Option1 and Option2 with the options you want in the field
}
return $values;
}
Комментарии:
1. Вы ищете
explode
. Используя запятую в качестве разделителя, вы можете получить значение строки запроса в виде массива значений.2. Спасибо @El_Vanja — Вы знаете, как я мог бы реализовать это с помощью своего кода? Я продолжаю нарушать форму. Я отредактировал вопрос, чтобы включить в него свою попытку по вашему предложению
3. То, что делала исходная функция, было добавлением к массиву опций:
$values['options'] = array($_GET['srch_main'], $_GET['srch_own'])
. Похоже, вам нужно было бы сделать то же самое, но в рамках цикла над вашими разнесенными значениями.4. Ах, после нескольких попыток я думаю, что это немного выходит за рамки моих хакерских навыков по составлению всего этого вместе. Спасибо за ваши предложения @El_Vanja. Возможно, я попробую в другой раз
5. Кажется, я неправильно понял, как работает эта функция. Попробуйте сделать следующее:
$values['options'] = explode(',' $_GET['search_main'])
и посмотрите, даст ли это желаемые результаты. Кроме того, я бы посоветовал вам избегать добавления пробелов внутри строки запроса (amp;srch_main=one,two,three
вместоamp;srch_main=one, two, three
).