Сложные данные формы PHP - PullRequest
0 голосов
/ 02 декабря 2010

У меня есть форма с многоуровневым деревом отношений один ко многим. Например:

Match -> Phase 1 -> Phase Property 1
      -> Phase 1 -> Phase Property 2

      -> Phase 2 -> Phase Property 1
      -> Phase 2 -> Phase Property 2
      -> Phase 2 -> Phase Property 3

      -> Phase 3 -> Phase Property 1
      -> Phase 3 -> Phase Property 2

Итак, на внешнем интерфейсе я могу добавить много фаз в соответствие и много свойств фазы в фазу.

В бэкэнде PHP я хотел бы иметь возможность представлять эти данные в многомерном массиве, чтобы я мог проходить по всем фазам и затем просматривать все свойства каждой фазы. В идеале я хотел бы избежать управления идентификаторами / именами через JavaScript.

Я знаю, что могу получить массив в PHP, используя что-то вроде этого:

<input type="text" name="phases[]" />

Но как мне продолжить этот шаблон для свойств? Могу ли я сделать что-то вроде:

<input type="text" name="phaseProperties[][]" />

а потом как-то "связать" каждое свойство с нужной фазой?

Ответы [ 4 ]

2 голосов
/ 02 декабря 2010

Если поля ввода появляются на статической странице, то вы уже должны знать, сколько полей ввода вы собираетесь заполнить на стороне сервера.Так почему использование полей типа:

<input type="text" name="phaseProperties[0][]" />
<input type="text" name="phaseProperties[0][]" />
<input type="text" name="phaseProperties[1][]" />

такая плохая вещь?Если поля генерируются динамически (на стороне клиента), тогда не должно возникнуть проблем с их динамическим присвоением имен.Кажется, ты слишком сильно сдерживаешься без видимой причины.

1 голос
/ 02 декабря 2010

Вы не можете использовать (на самом деле вы можете, но это вам не поможет)

<input type="text" name="phaseProperties[][]" />

потому что PHP не может знать, как вы хотите, чтобы ваши элементы были сгруппированы. Он добавит каждый элемент в отдельную группу.

Array
(
    [0] => Array
        (
            [0] => Item 1
        )

    [1] => Array
        (
            [0] => Item 2
        )

    [2] => Array
        (
            [0] => Item 3
        )

    [3] => Array
        (
            [0] => Item 4
        )
)

Нет ничего особенного в использовании [] в параметрах. Они ведут себя точно так же, как оператор [] в PHP. Например:

$arr[][] = 'Item 1';
$arr[][] = 'Item 2';
$arr[][] = 'Item 3';
$arr[][] = 'Item 4';
print_r($arr);

будет иметь тот же вывод, который я выложил выше.

1 голос
/ 02 декабря 2010

Да, вы можете сделать как:

<input type="text" name="phaseProperties[Phase1][Property1]" />
<input type="text" name="phaseProperties[Phase1][Property2]" />
<input type="text" name="phaseProperties[Phase1][Property3]" />
<input type="text" name="phaseProperties[Phase2][Property1]" />
<input type="text" name="phaseProperties[Phase2][Property2]" />
<input type="text" name="phaseProperties[Phase2][Property3]" />

А в бэкэнд PHP вы получите свойства фазы, как это:

Array
(
[Phase1] => Array
(
[Property1] => a
[Property2] => b
[Property3] => c
)

[Phase1] => Array
(
[Property1] => d
[Property2] => e
[Property3] => f
)

) 
0 голосов
/ 02 декабря 2010

Когда вы визуализируете пользовательский интерфейс (HTML), вы можете просто использовать php для зацикливания и вывода ввода?

$phases = 3;
$phasesProperty = array(
    array(1, 2),
    array(1, 2, 3),
    array(1, 2)
);

for($i = 0; $i < $phases; $i++) {
    foreach($phasesProperty[$i] as $j) {
        printf('<input type="text" name="Match[Phase%d][PhaseProperty%d]" />', $i, $j);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...