Цикл, хотя несколько массивов

У меня есть массив массивов и я хочу разместить данные в определенном порядке.

Вот моя HTML-форма. Пользователь (и) может добавлять новые строки для ввода дополнительных данных по мере необходимости.

    <tr>
        <td><input type="text" value="" placeholder="Date of Transfer" name="date[]"/></td>
        <td><input type="text" value="" placeholder="Equpment Tag" name="tag[]"/></td>
        <td><input type="text" value="" placeholder="Equpment Model" name="model[]"/></td>
        <td><input type="text" value="" placeholder="Current Room" name="oldRoom[]"/></td>
        <td><input type="text" value="" placeholder="Current Owner" name="oldOwner[]"/></td>
        <td><input type="text" value="" placeholder="Current Dept" name="oldDept[]"/></td>
        <td><input type="text" value="" placeholder="New Room" name="newRoom[]"/></td>
        <td><input type="text" value="" placeholder="New Owner" name="newOwner[]"/></td>
        <td><input type="text" value="" placeholder="New Dept" name="newDept[]"/></td>
    </tr>
</tbody>

<tfoot>
    <tr>
        <td colspan="3"><a href="javascript:void(0);" id='anc_add'>Add Row</a></td>
        <td colspan="3"><a href="javascript:void(0);" id='anc_rem'>Remove Row</a></td>
        <td colspan="3"><button type="submit">Submit</button></td>
    </tr>

Затем я помещаю значения $_POSTed в переменную массива $data.

$data = array(  tag => $_POST['tag'],
                model => $_POST['model'], 
                oldRoom => $_POST['oldRoom'],
                oldOwner => $_POST['oldOwner'],
                oldDept => $_POST['oldDept'],
                newRoom => $_POST['newRoom'],
                newOwner => $_POST['newOwner'],
                newDept => $_POST['newDept']
                );

Я выяснил, как получить желаемый результат, вручную получая значения массива $data, но хочу зациклить все данные.

//manual retreaval
echo "</br></br>Manually getting data from the $data array</br>";
echo $data['tag'][0] . " - " . $data['model'][0] . " - " . $data['oldRoom'][0];

выходы:

tag1 - model1 - oldRoom1

Так есть ли и как я могу написать php-скрипт для цикла через массив $data в формате, как показано выше?

tag1 - модель1 - oldRoom1 - .... tag2 - модель2 - oldRoom2 - ...

3 ответа

Решение

Чтобы получить результат, который я искал, мне нужно было создать цикл for. Сначала мне нужно было подсчитать, сколько значений было сохранено, затем выполнить цикл до тех пор, пока $i не станет <= $c - 1.

$c = count($data['tag']);

for ($i = 0; $i <= $c -1 ; $i++) {
echo $data['tag'][$i] . " - " . 
     $data['model'][$i] . " - " . 
     $data['oldRoom'][$i] . " - " .
     $data['oldOwner'][$i] . " - " .
     $data['oldDept'][$i] . " - " .
     $data['newRoom'][$i] . " - " .
     $data['newOwner'][$i] . " - " .
     $data['newDept'][$i] . "</br>";
}

Выходы:

tag1 - модель1 - комната1 - владелец1 - dept1 - комната1 - владелец1 - dept1

tag2 - модель2 - комната2 - владелец2 - dept2 - комната2 - владелец2 - dept2

Вы можете использовать foreach() цикл для просмотра всех значений, т. е. для тегов:

foreach($data['tag'] as $tag)
{
    echo $tag;
}

чтобы получить доступ к одному и тому же индексу в другом массиве, т. е. чтобы создать "соответствие" между старыми комнатами и старыми владельцами, вы можете использовать:

foreach($data['oldRoom'] as $index => $oldRoom)
{
     if(isset($data['oldOwner'][$index]))
         echo $oldRoom . " belonged to " . $data['oldOwner'][$index];
     else
         echo $oldRoom . " didn't have an old owner! :(";
}

Использовать foreach() петля -

foreach($data as $key => $value) {
    echo 'key: '.$key.' value: '.$value.'<br>'; 
}
Другие вопросы по тегам