Como posso usar os nomes dos campos de entrada em formato de matriz no meu formulário HTML que são postados no PHP?

Entendo o básico do uso dos nomes de entrada HTML formatados em matriz. Se eu tivesse um formulário com um número variável de entradas 'item', eu poderia fazer algo assim para cada uma delas:

<input name='item[]' type='text' />

E quando eu recuperar os itens da matriz $ _POST, eu poderia iterar sobre eles da seguinte maneira:

$items = $_POST['item'];
foreach($items as $item) {
}

Mas minha pergunta é um pouco mais complicada. Eu tenho um formulário no qual os usuários podem clicar em um botão "adicionar um" e uma nova linha aparecerá no número inferior do formulário. Cada nova linha contém uma entrada 'nome' e 'descrição'.

Então, inicialmente pensei que faria isso:

<input name='item[name][]' type='text' />
<input name='item[description][]' type='text' />

E então itere sobre eles da seguinte maneira:

$items = $_POST['item'];
foreach($items as $item) {
  print $item['name'] . ' ' . $item['description'];
}

Mas, em vez de funcionar como eu esperava, ele estrutura a matriz 'item', de modo que eu acessaria o primeiro nome do item como$item['name'][0] ao invés de$item[0]['name'].

Então, eu o virei para que minhas entradas fossem nomeadas da seguinte forma:

<input name='item[][name]' type='text' />
<input name='item[][description]' type='text' />

Mas isso resultou em um 'item' separado para cada 'nome' e para cada 'descrição', em vez de agrupar cada par em um único 'item'.

Eu realmente não gosto de ter matrizes de 'nome' e matriz separada de 'descrição'. Eu preferiria matrizes de 'item' com cada matriz contendo um campo 'nome' e 'descrição'. Existe alguma maneira de fazer isso sem gerar o índice no meu javascript? Como as pessoas podem adicionar e remover dinamicamente, é muito difícil para o meu javascript calcular o índice apropriado para o próximo item. Não há como fazer isso genericamente?

questionAnswers(1)

yourAnswerToTheQuestion