[英]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,以便可以做进一步的逻辑。
任何想法为什么会发生这种情况,或者任何想法如何解决这一堆代码? 谢谢。
[
{
"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.