遍历所有具有几乎相同 ID 的 $_POST

Iterate thru all $_POST with almost identical ID

我有一个 table,它的行数是动态的,每个 <td> id 和名称每行不同(即 <tr><td id="name_1" name="name_1"></td></tr> <tr><td id="name_2" name="name_2"></td></tr>),它通过 $_POST

在控制器中获取 table 到 $_POST 的值之后。然后我想将每个 table 行放入数组中,然后将其发送到模型以插入到数据库中。

这是我控制器中的代码

public function submitPPMP(){
    print_r($_POST);
    $ppmp_id = $this->PPMP_model->submitPPMP();
    $counter = 1;
    foreach ($_POST as $key => $value){
        $project_details = array(
            'project_id' => $ppmp_id,
            'supply_id' => $_POST['items_' . $counter],
            'quantity' => $_POST['qty_' + $counter],
            'price' => 1,
            'jan' => $_POST['jan_' . $counter],
            'feb' => $_POST['feb_' . $counter],
            'mar' => $_POST['mar_' . $counter],
            'apr' => $_POST['apr_' . $counter],
            'may' => $_POST['may_' . $counter],
            'jun' => $_POST['jun_' . $counter],
            'jul' => $_POST['jul_' . $counter],
            'aug' => $_POST['aug_' . $counter],
            'sep' => $_POST['sep_' . $counter],
            'oct' => $_POST['oct_' . $counter],
            'nov' => $_POST['nov_' . $counter],
            'dec' => $_POST['dec_' . $counter]
        );
        $counter = $counter + 1;
        //send the $project_details to model and insert to database
    }       
    print_r($project_details);
}

但是,我似乎无法得到正确的结果,因为我在第 'supply_id' => $_POST['items_' . $counter] 行收到 Undefined offset: 1 错误。将每一行放入数组并将其发送到模型的正确方法是什么?

我的$_POST数据是:-

 Array ( [unit] => [category_1] => 1 [items_1] => 5 [qty_1] => 1 [jan_1] => 1 [feb_1] => [mar_1] => [apr_1] => [may_1] => [jun_1] => [jul_1] => [aug_1] => [sep_1] => [oct_1] => [nov_1] => [dec_1] => [row_2] => 1 [items_2] => 27 [qty_2] => 1 [jan_2] => 1 [feb_2] => [mar_2] => [apr_2] => [may_2] => [jun_2] => [jul_2] => [aug_2] => [sep_2] => [oct_2] => [nov_2] => [dec_2] => [row_3] => 1 [items_3] => 20 [qty_3] => 1 [jan_3] => 1 [feb_3] => [mar_3] => [apr_3] => [may_3] => [jun_3] => [jul_3] => [aug_3] => [sep_3] => [oct_3] => [nov_3] => [dec_3] => [action] => )

由于您要在每个循环中更新计数器值,因此您应该将其从 foreach 循环中删除。

$counter = 1;
foreach ($_POST as $key => $value){
//...

看起来你创建了一个无限循环,

每次触发 foreach ($_POST as $key => $value) 循环时,您的计数器都会再次设置为 1。

将计数器变量放在 for 循环之外,您可以放置​​一个 while 或 for 循环条件。

我建议重组您的数据。它目前是一个平面列表,如:

Array (
    [unit] =>
    [category_1] => 1
    [items_1] => 5
    [qty_1] => 1
    [jan_1] => 1
    ..
    [row_2] => 1
    [items_2] => 27
    [qty_2] => 1
    [jan_2] => 1
    ..
    [row_3] => 1
    [items_3] => 20
    [qty_3] => 1
    [jan_3] => 1
    ..
    [action] =>
)

如果你的数据是这样的:

array(
    "unit" => "",
    "category" => 1,
    "items" => array(
        array(
            "id" => 5,
            "quantity" => 1,
            "months" => array(
                "jan" => 1
                ..
            )
        ),
        array(
            "id" => 27,
            "quantity" => 1,
            "months" => array(
                "jan" => 1
                ..
            )
        ),
        array(
            "id" => 20,
            "quantity" => 1,
            "months" => array(
                "jan" => 1
                ..
            )
        )
    ),
    "action" => ""
)

你的逻辑会简单很多。构建这样的请求并不难。

如果您的请求来源是 HTML 表单,您可以:

Quantity for item 1: <input type="text" name="items[0][quantity]" />
Quantity for item 2: <input type="text" name="items[1][quantity]" />
.. etc

如果您的请求源是 PHP 脚本,您可以使用 http_build_query 构建格式良好的 POST-body。