Birden $ _POST dizileri yineleme

5 Cevap php

Ben aşağıdaki kodu vardır:

        <tr>
      <td width="60%"><dl>
          <dt>Full Name</dt>
          <dd>
            <input name="fullname[]" type="text" class="txt w90" id="fullname[]" value="<?php echo $value; ?>" />
          </dd>
        </dl></td>
      <td width="30%"><dl>
          <dt>Job Title</dt>
          <dd>
            <input name="job_title[]" type="text" class="txt w90" id="job_title[]" value="<?php echo $value2; ?>" />
          </dd>
        </dl></td></tr>

Ben yukarıdaki kod birkaç satır olduğunu varsayalım. Nasıl $_POST['fullname'] ve $_POST['job_title'] yineleme ve diziler için değer alabilirim?

5 Cevap

Bu sadece bir dizi var:

foreach ($_POST['fullname'] as $name) {
    echo $name."\n";
}

Sorun paralel iki diziler üzerinde yineleme istiyorsanız ise sadece dizinleri elde etmek için bunlardan birini kullanın:

for ($i=0; $i < count($_POST['fullname']); $i++) {
    echo $_POST['fullname'][$i]."\n";
    echo $_POST['job_title'][$i]."\n";
}

Bu Vinko cevabı oldukça yakın olduğundan ben bu daha önce silindi.

for ($i = 0, $t = count($_POST['fullname']); $i < $t; $i++) {
    $fullname = $_POST['fullname'][$i];
    $job_title = $_POST['job_title'][$i];
    echo "$fullname $job_title \n";
}

N-1 - 0 orijinal endeksi sayısal ile değil

$range = array_keys($_POST['fullname']);
foreach ($range as $key) {
    $fullname = $_POST['fullname'][$key];
    $job_title = $_POST['job_title'][$key];
    echo "$fullname $job_title \n";
}

Bu sadece genel bilgi içindir. : SPL DualIterator ile gibi bir şey yapabilirsiniz

$dualIt = new DualIterator(new ArrayIterator($_POST['fullname']), new ArrayIterator($_POST['job_title']));

while($dualIt->valid()) {
    list($fullname, $job_title) = $dualIt->current();
    echo "$fullname $job_title \n";
    $dualIt->next();
}

Ben çözmeye çalışıyoruz sorun, $ _POST ['fullname'] Aynı endeksine sahip olan [] ve $ _POST ['JobTitle'] [] değerleri bir çift almak olduğunu düşünüyorum.

for ($i = 0, $rowcount = count($_POST['fullname']); $i < $rowcount; $i++)
{
    $name = $_POST['fullname'][$i];	// get name
    $job  = $_POST['jobtitle'][$i]; // get jobtitle
}

Ben doğru anlamak, temelde paralel üzerinde yinelemek isteyen 2 diziler var.

Aşağıdaki gibi bir şey sizin için çalışabilir. Bunun yerine $ a1 ve a2 $ size $ _POST ['fullname'] ve $ _POST ['JobTitle'] kullanmak istiyorsunuz.

<?php
$a1=array('a','b','c','d','e','f');
$a2=array('1','2','3','4','5','6');

// reset array pointers    
reset($a1); reset($a2);
while (TRUE)
{
  // get current item
  $item1=current($a1);
  $item2=current($a2);
  // break if we have reached the end of both arrays
  if ($item1===FALSE and $item2===FALSE) break;  
  print $item1.' '. $item2.PHP_EOL;
  // move to the next items
  next($a1); next($a2);
}

Vinko ve OIS '(Yanıt OIS upticked) mükemmel'. Her zaman metin alanlarının 5 kopya yazdırırken Ama eğer, her zaman sadece özellikle her alanını isim olabilir:

<?php $i=0; while($i < 5) { ?><tr>
    ...
    <input name="fullname[<?php echo $i; ?>]" type="text" class="txt w90" id="fullname[<?php echo $i; ?>]" value="<?php echo $value; ?>" />