HTML Form itibaren PHP n-Boyutlu Diziler fashioning

1 Cevap php

Ben bir formun verileri bir dizi olarak belirli bir biçimde sipariş sunucu üzerinde gelmesi olmasını istiyorum. Halen, benim biçimlendirme defalarca görünebilir aşağıdaki form öğeleri var:

...
<tr>
  <td><p>Friend's Name:</p></td>
  <td><p><input type="text" name="friends[name][]" /></p></td>
  <td><p>Friend's Email:</p></td>
  <td><p><input type="text" name="friends[email][]" /></p></td>
  <td><p><input type="button" value="+" class="addOne" /></td>
</tr>
...

Teslim olduğunda, sonuç bu gibi görünür:

[friends] => Array
  (
    [name] => Array
    (
      [0] => John Doe
      [1] => Jane Doe
    )
    [email] => Array
    (
      [0] => John@Doe.com
      [1] => Jane@Doe.com
    )
  )

Ben sadece iyi bu dizi kullanabilirsiniz, ancak aynı veri aşağıdaki dizi örnek şeklinde görünür olması mümkündür merak ediyorum:

[friends] => Array
  (
    [0] => Array
    (
      [name] => John Doe
      [email] => John@Doe.com
    )
    [1] => Array
    (
      [name] => Jane Doe
      [email] => Jane@Doe.com
    )
  )

Ben bu gibi, bu modernleşmek için özel indeksleri ile isimleri kullanmak olabileceğini anlıyoruz:

friends[0][name] ve friends[0][email]

Ben dinamik form elemanları için yeni bir isim yazmak zorunda kalmadan aynı sonucu elde edebilirsiniz Ama eğer ben merak ediyorum.

1 Cevap

My first thought was to use name="friends[][name]" instead of name="friends[name][]"
Then, I quickly realised the indices will be incremented too, to give out friends[0][name] and friends[1][email]

Ben aklıma tek uygulanabilir çözüm POST verileri işlemek ve bunları, bir şey gibi olmak istiyorum gibi onları yeniden düzenlemek için, sanırım:

$newFriends=array();
foreach($_POST["friends"] as $k1 => $v1){
  foreach($v1 as $k2 => $v2){
    $newFriends[$k2][$k1]=$v;
  }
}

$newFriends aradığınız yapıya sahip olmalıdır

Tabii, gerektiği gibi () kontrolleri isset () ve is_array eklemek gerekir ... ve verileri bekliyoruz dizisinde POST-ed değilse bazı değerler üzerine olabilir ki aslında dikkatli olacaktır .. .