Как преобразовать числовой индекс массива в ассоциативный массив - PullRequest
1 голос
/ 18 июня 2020

В настоящее время я борюсь с отправкой формы Dynami c. Я использую простой пост, но если есть какой-либо способ получить данные из всей таблицы, я хотел бы знать.

Итак, это HTML таблица:

    <form id="importForm" method="post" action="/modules/import/test.php">
    <table class="table table-bordered table-hover table-striped table-sm">
        <thead class="bg-dark thwhite thead-dark">
            <td><small>First name</small></td>
            <td><small>Last name</small></td>
            <td><small>Start date</small></td>
            <td><small>Location</small></td>
            <td><small>Job title</small></td>
            <td><small>Department</small></td>
            <td><small>Manager</small></td>
            <td><small>Hardware</small></td>
            <td><small>Remarks</small></td>

        </thead>

    <?php
    $i = 1;
    foreach($values as $row){ 

        <tr>
        <td style="display:none">
        <input type="hidden" name="id[]" value="<?php echo $$i++ ?>">
        </td>
        <td>
        <small><?php echo $row[0] ?></small>
        <input type="hidden" name="firstname[]" value="<?php echo $row[0] ?>">
        </td>
        <td>
        <small><?php echo $row[1] ?></small>
        <input type="hidden" name="lastname[]" value="<?php echo $row[1] ?>">
        </td>
        <td>
        <small><?php echo $row[3] ?></small>
        <input type="hidden" name="startdate[]" value="<?php echo $row[3] ?>">
        </td>
        <td>
        <small><?php echo $row[2] ?></small>
        <input type="hidden" name="location[]" value="<?php echo $row[2] ?>">
        </td>
        <td>
        <small><?php echo $row[4] ?></small>
        <input type="hidden" name="jobtitle[]" value="<?php echo $row[4] ?>">
        </td>
        <td>
        <small><?php echo $row[5] ?></small>
        <input type="hidden" name="department[]" value="<?php echo $row[5] ?>">
        </td>
        <td>
        <small><?php echo $row[6] ?></small>
        <input type="hidden" name="manager[]" value="<?php echo $row[6] ?>">
        </td>
        <td>
        <small><?php echo $row[11] ?></small>
        <input type="hidden" name="hardware[]" value="<?php echo $row[11] ?>">
        </td>
        <td>
        <small><?php echo $row[15] ?></small>
        <input type="hidden" name="remarks[]" value="<?php echo $row[15] ?>">
        </td>
    </tr>
    <?php }

} ?>
</table>
<div class="w100 tleft">
<button id="importList" class="inline">Import</button>
</div>
</form>

И print_r($_POST) в test. php файл выглядит следующим образом:

Array ( 
    [id] => Array ( 
        [0] => 
        [1] => 1 
        [2] => 2 
        [3] => 3 
    ) 
    [firstname] => Array ( 
        [0] => Michael 
        [1] => Dwight 
        [2] => Jim 
        [3] => Andrew 
    ) 
    [lastname] => Array ( 
        [0] => Scott 
        [1] => Schrute 
        [2] => Halpert 
        [3] => Bernard 
    ) 
    [startdate] => Array ( 
        [0] => 1-7-2020 
        [1] => 1-7-2020 
        [2] => 1-7-2020 
        [3] => 1-7-2020 
    ) 
    [location] => Array ( 
        [0] => Scranton office 
        [1] => Scranton office 
        [2] => Scranton office 
        [3] => Scranton office 
    ) 
    [jobtitle] => Array ( 
        [0] => Regional manager 
        [1] => Assistant to the regional manager 
        [2] => Salesman 
        [3] => Salesman 
    ) 
    [department] => Array ( 
        [0] => Management 
        [1] => Sales 
        [2] => Sales 
        [3] => Sales 
    ) 
    [manager] => Array ( 
        [0] => David Wallace 
        [1] => Michael Scott 
        [2] => Michael Scott
        [3] => Michael Scott 
    ) 
    [hardware] => Array ( 
        [0] => Laptop, laptop bag, desk phone 
        [1] => None 
        [2] => None 
        [3] => None 
    ) 
    [remarks] => Array ( 
        [0] => 
        [1] => 
        [2] => 
        [3] => 
    ) 
)

вывод foreach ($_POST as $row){ echo $row; } не работает, мне нужно эхо $row[1], а затем у меня есть полная строка, но у меня нет контроля над полем, например firstname или другими.

Я хочу преобразовать это, чтобы иметь возможность делать это, как это эхо $row['firstname'], а затем foreach l oop будет вернуть все имена.

1 Ответ

0 голосов
/ 18 июня 2020

Измените имена входов на следующий формат:

name="person[$i][firstname]"
name="person[$i][lastname]"
...

Тогда $_POST будет выглядеть так:

Array(
    [person] => Array( 
        [0] => Array(
            [firstname] => "Foo"
            [lastname]  => "Bar"
            ...
        )
        [1] => Array(
            [firstname] => "Foo2"
            [lastname]  => "Bar2"
            ...
        )
        ...
)

Теперь вы сможете l oop через значения вроде этого:

foreach ($_POST['person'] as $row) {
    echo $row['firstname'];
    echo $row['lastname'];
    ...
}

Примечание: Я не уверен, как вы используете переменную $i, так как это: $$i++ выглядит странно и может вызвать проблемы. Я бы поставил $i = 0 перед l oop, а затем имел бы $i++ в качестве последнего элемента перед закрытием } для l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...