PHP foreach in foreach in foreach / for循环用last覆盖

k0pti3hp  于 2023-05-21  发布在  PHP
关注(0)|答案(2)|浏览(213)

我在循环多维数组列表时遇到了一个奇怪的问题。
其逻辑是:
每个部门都有许多服务,每个服务都有许多用户。
这就是循环。

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,这样我就可以做进一步的逻辑。
你知道为什么会发生这种情况吗?或者你知道我如何修复这堆代码吗?谢谢你。

EDIT:按照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
                    }
                ]
            }
        ]
    }
]
nhaq1z21

nhaq1z211#

试着改变
$user->service_id = $departments[$i]->services[$j]->id;

$user->service_id = $service_id;

mm5n2pyu

mm5n2pyu2#

尝试使用foreach()而不是for(),这使事情变得不那么复杂

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

相关问题