Разделите массив из параметра URL с помощью запятой и разделителя пробела в php

#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 ).