Search code examples
phpmultidimensional-arrayforeachnested-loops

PHP nested foreach is only taking first key


I am getting a lot of data from a form through POST. As an example, here is some of the data:

event_date:

Array (
    [0] => 2017-04-02
    [1] => 2017-04-02
    [2] => 2017-04-03 )

equipment_name:

Array
(
    [0] => Array
        (
            [0] => Mic
            [1] => Sound System
            [2] => Wireless Mic
            [3] => Two Point Stage Wash
        )

    [1] => Array
        (
            [0] => Sound System
        )

    [2] => Array
        (
            [0] => Projection Package
            [1] => Gobo
            [2] => Audio Engineer
        )
)

To save this data I am doing two foreach loops:

foreach ($_POST['event_date'] as $key => $date) {
    echo "event number [".$key."]<br>";
    //insert into table value $_POST['event_date'][$key]

    foreach ($_POST['equipment_name'] as $ekey => $value) {
        echo "equipment number [".$key."][".$ekey."]<br>";
        //insert into table value $_POST['equipment_name'][$key][$ekey];
    }
}

Unfortunately my result is the following:

event number [0]
   equipment number [0][0]
   equipment number [0][1]
   equipment number [0][2]
event number [1]
   equipment number [1][0]
   equipment number [1][1]
   equipment number [1][2]
event number [2]
   equipment number [2][0]
   equipment number [2][1]
   equipment number [2][2]

As you can notice, the nested key ($ekey) equals the first key, not showing items over that number (eg: equipment number [0][3]), and saving nothing if the amount of equipment is lower than that number (eg: equipment number [1][1] and [1][2]).

Why the nested loop has this behavior? How could I solve this issue?


Solution

  • If I understood your question right, I think you want to access a particular nested array from $_POST['equipment_name'], yet you always access the outer array. This is a simple fix, change your second foreach to:

    foreach ($_POST['equipment_name'][$key] as $ekey => $value) {
                                     ^^^^^^