Я использую плагин WordPress для расширенного проектирования / логики / обработки форм, и один из его (самых больших) недостатков - неудобный способ предоставления данных формы.Данные представлены в виде массива с двумя или тремя элементами для каждого поля.
, если это скрытое поле:
$$$n => id
- где n - порядок поля в форме,и NAME - это имя / идентификатор. id => value
- где id - это имя / идентификатор, а значение - это значение.
Если это видимое поле:
$$$n => LABEL
- где n - порядок поля в форме, а LABEL - удобочитаемая метка. $$$id => LABEL
- где id - имя / идентификатор поля LABEL => value
- где значение - это то, что я на самом деле хочу.
Я пытаюсь написать функцию, которая будет использовать этот ужасный массив и вернет более простой с одним id => value
пара для каждого поля.
Например, он примет это (порядок полей не может быть гарантирован):
array(
'$$$1' => 'command',
'command' => 'signup',
'$$$2' => 'First Name',
'$$$firstname' => 'First Name',
'First Name' => 'John',
'$$$3' => 'Email Address',
'$$$email' => 'Email Address',
'Email Address' => 'john@example.com'
);
и возврат:
array(
'command' => 'signup',
'email' => 'john@example.com',
'firstname' => 'John'
);
Этот код работает, но чувствует себя очень неловко.Можете ли вы помочь уточнить это? Спасибо!(Моя стратегия состоит в том, чтобы игнорировать все, кроме полей $$$n
, поскольку они идентичны для всех форм, и нет простого способа определить, является ли данное поле скрытым или нет.)
function get_cforms_data($cformsdata) {
$data = array();
foreach ($cformsdata as $key => $value) {
if (strpos($key, '$$$') === 0) {
$newkey = substr($key, 3);
if (is_numeric($newkey)) {
$keys = array_keys($cformsdata, $value);
if (count($keys) == 1) {
// must be a hidden field - NAME only appears once
$data[$value] = $cformsdata[$value];
} else {
// non-hidden field. Isolate id.
foreach($keys as $k) {
if ($k == $key) {
// $$$n - ignore it
continue;
} else {
// $$$id
$k = substr($k, 3);
$data[$k] = $cformsdata[$value];
}
}
}
}
}
}
return $data;
}