【问题标题】:PHP nested foreach is only taking first keyPHP嵌套foreach只取第一个键
【发布时间】:2017-09-27 20:29:14
【问题描述】:

我通过 POST 从表单中获取大量数据。例如,以下是一些数据:

事件日期:

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

设备名称:

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
        )
)

为了保存这些数据,我正在执行两个 foreach 循环:

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];
    }
}

不幸的是,我的结果如下:

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]

如您所见,嵌套键 ($ekey) 等于第一个键,不显示超过该编号的项目(例如:设备编号 [0][3]),如果设备数量低于该编号(例如:设备编号 [1][1] 和 [1][2])。

为什么嵌套循环有这种行为?我该如何解决这个问题?

【问题讨论】:

    标签: php multidimensional-array foreach nested-loops


    【解决方案1】:

    如果我理解你的问题是正确的,我认为你想从$_POST['equipment_name'] 访问一个特定的嵌套数组,但你总是访问外部数组。这是一个简单的修复,将您的第二个 foreach 更改为:

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

    【讨论】:

    • 哦,天哪...我花了最后两个小时来解决这个问题,让您在 10 秒内解决它!非常感谢你,西迪尔!
    • @cbarg 很高兴为您提供帮助! :)
    猜你喜欢
    • 2020-01-08
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多