繁体   English   中英

php foreach in foreach中的foreach / for循环用last覆盖

[英]php foreach in foreach in foreach / for loop overwrite with last

我在遍历数组的多维列表时遇到了一个奇怪的问题。

逻辑是:

每个部门有很多服务,每个服务有很多用户。

这是循环。

for ($i=0; $i < count($departments); $i++) {

    for ($j=0; $j < count($departments[$i]->services); $j++) {

        $service_id = $departments[$i]->services[$j]->id;

        for ($k=0; $k < count($departments[$i]->services[$j]->users); $k++) {
            $user = $departments[$i]->services[$j]->users[$k];

            $user->service_id = $departments[$i]->services[$j]->id;

        }

    }

}

结果是:

{
    "id": 1,
    "name": "Coafor",
    "company_id": 1,
    "services": [
        {
            "id": 1,
            "name": "Coafat par scurt",
            "department_id": 1,
            "users": [
                {
                    "id": 4,
                    "first_name": "Andrei",
                    "last_name": "Varlan",
                    "service_id": 4
                },
                {
                    "id": 7,
                    "first_name": "Claudiu",
                    "last_name": "Angheluta",
                    "service_id": 4
                }
            ]
        },
    ]
}

如您所见,每个用户中的服务ID必须是主服务上的ID,但是最后一个服务ID覆盖它是4。我需要来自父服务的ID,以便可以做进一步的逻辑。

任何想法为什么会发生这种情况,或者任何想法如何解决这一堆代码? 谢谢。

编辑:作为Mateusz请求查看所有部门阵列。

[
    {
        "id": 1,
        "name": "Coafor",
        "company_id": 1,
        "services": [
            {
                "id": 1,
                "name": "Coafat par scurt",
                "department_id": 1,
                "users": [
                    {
                        "id": 4,
                        "first_name": "Andrei",
                        "last_name": "Varlan",
                        "service_id": 4
                    },
                    {
                        "id": 7,
                        "first_name": "Claudiu",
                        "last_name": "Angheluta",
                        "service_id": 4
                    }
                ]
            },
            {
                "id": 5,
                "name": "Vopsit par mediu",
                "department_id": 1,
                "users": [
                    {
                        "id": 4,
                        "first_name": "Andrei",
                        "last_name": "Varlan",
                        "service_id": 4
                    },
                    {
                        "id": 5,
                        "first_name": "Andrei",
                        "last_name": "Cazamir",
                        "service_id": 4
                    },
                    {
                        "id": 6,
                        "first_name": "Luminita",
                        "last_name": "Cucu",
                        "service_id": 4
                    },
                    {
                        "id": 7,
                        "first_name": "Claudiu",
                        "last_name": "Angheluta",
                        "service_id": 4
                    }
                ]
            },
            {
                "id": 6,
                "name": "Vopsit par lung",
                "department_id": 1,
                "users": [
                    {
                        "id": 4,
                        "first_name": "Andrei",
                        "last_name": "Varlan",
                        "service_id": 4
                    },
                    {
                        "id": 5,
                        "first_name": "Andrei",
                        "last_name": "Cazamir",
                        "service_id": 4
                    },
                    {
                        "id": 6,
                        "first_name": "Luminita",
                        "last_name": "Cucu",
                        "service_id": 4
                    },
                    {
                        "id": 7,
                        "first_name": "Claudiu",
                        "last_name": "Angheluta",
                        "service_id": 4
                    }
                ]
            }
        ]
    },
    {
        "id": 2,
        "name": "Frizerie",
        "company_id": 2,
        "services": [
            {
                "id": 2,
                "name": "Tuns par mediu",
                "department_id": 2,
                "users": [
                    {
                        "id": 4,
                        "first_name": "Andrei",
                        "last_name": "Varlan",
                        "service_id": 4
                    },
                    {
                        "id": 5,
                        "first_name": "Andrei",
                        "last_name": "Cazamir",
                        "service_id": 4
                    },
                    {
                        "id": 6,
                        "first_name": "Luminita",
                        "last_name": "Cucu",
                        "service_id": 4
                    },
                    {
                        "id": 7,
                        "first_name": "Claudiu",
                        "last_name": "Angheluta",
                        "service_id": 4
                    }
                ]
            },
            {
                "id": 3,
                "name": "Tuns par lung",
                "department_id": 2,
                "users": [
                    {
                        "id": 4,
                        "first_name": "Andrei",
                        "last_name": "Varlan",
                        "service_id": 4
                    },
                    {
                        "id": 5,
                        "first_name": "Andrei",
                        "last_name": "Cazamir",
                        "service_id": 4
                    },
                    {
                        "id": 6,
                        "first_name": "Luminita",
                        "last_name": "Cucu",
                        "service_id": 4
                    },
                    {
                        "id": 7,
                        "first_name": "Claudiu",
                        "last_name": "Angheluta",
                        "service_id": 4
                    }
                ]
            },
            {
                "id": 4,
                "name": "Tuns si Vopsit par scurt",
                "department_id": 2,
                "users": [
                    {
                        "id": 4,
                        "first_name": "Andrei",
                        "last_name": "Varlan",
                        "service_id": 4
                    },
                    {
                        "id": 5,
                        "first_name": "Andrei",
                        "last_name": "Cazamir",
                        "service_id": 4
                    },
                    {
                        "id": 6,
                        "first_name": "Luminita",
                        "last_name": "Cucu",
                        "service_id": 4
                    },
                    {
                        "id": 7,
                        "first_name": "Claudiu",
                        "last_name": "Angheluta",
                        "service_id": 4
                    }
                ]
            }
        ]
    }
]

尝试改变

$user->service_id = $departments[$i]->services[$j]->id;

$user->service_id = $service_id;

尝试使用foreach()而不是for()可以简化事情

<?php
foreach ($departments as $department) {
    foreach ($department->services as $service) {
        foreach ($service->users as $user) {
            $user->service_id = $service->id;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM