【发布时间】:2019-11-11 21:08:45
【问题描述】:
我正在尝试使用链接到街道名称的表单创建一个数组。为了确保表单只添加到数组中一次,我循环遍历它。根据表单 id,我可以将 id、名称、百分比和街道添加到数组 $projectForms 中,或者仅在 $projectForms 中已经存在 id 时添加街道。
代码:
$projectForms = [
'projectName' => $projectName,
'forms' => []
];
foreach ($houses as $house) {
foreach ($house['forms'] as $form) {
if (!$projectForms['forms']) {
array_push($projectForms['forms'], array('id' => $form['id'], 'name' => $form['name'], 'percentage' => $form['percentage'], 'streets' => array($house['fullStreet'])));
} else {
foreach ($projectForms['forms'] as $key => $value) {
if ($projectForms['forms'][$key]['id'] === $form['id']) {
array_push($projectForms['forms'][$key]['streets'], $house['fullStreet']);
} else if ($projectForms['forms'][$key]['id'] !== $form['id']) {
array_push($projectForms['forms'], array('id' => $form['id'], 'name' => $form['name'], 'percentage' => $form['percentage'], 'streets' => array($house['fullStreet'])));
}
}
}
}
}
dd($projectForms['forms']);
//Return to the view
dd($projectForms);
return view('example')->with(['projectForms' => $projectForms]);
dd $houses:
array:6 [▼
0 => array:3 [▼
"id" => 97641
"fullStreet" => "SomeStreet 1"
"forms" => array:1 [▼
0 => array:3 [▼
"id" => 2456
"name" => "Some name"
"percentage" => 6.6666666666667
]
]
]
1 => array:3 [▼
"id" => 97642
"fullStreet" => "SomeStreet 2"
"forms" => array:1 [▼
0 => array:3 [▼
"id" => 2456
"name" => "Some Name"
"percentage" => 6.6666666666667
]
]
]
2 => array:3 [▼
"id" => 97643
"fullStreet" => "SomeStreet 3"
"forms" => array:1 [▼
0 => array:3 [▼
"id" => 2456
"name" => "Some Name"
"percentage" => 6.6666666666667
]
]
]
3 => array:3 [▼
"id" => 97644
"fullStreet" => "SomeStreet 4"
"forms" => array:1 [▼
0 => array:3 [▼
"id" => 2456
"name" => "Some Name"
"percentage" => 6.6666666666667
]
]
]
4 => array:3 [▼
"id" => 97645
"fullStreet" => "SomeStreet 5"
"forms" => array:1 [▼
0 => array:3 [▼
"id" => 2489
"name" => "Some name"
"percentage" => 3.3333333333333
]
]
]
5 => array:3 [▼
"id" => 97646
"fullStreet" => "SomeStreet 6"
"forms" => array:1 [▼
0 => array:3 [▼
"id" => 2489
"name" => "Some Name"
"percentage" => 3.3333333333333
]
]
]
]
完成后添加 $projectForms:
array:3 [▼
0 => array:4 [▼
"id" => 2456
"name" => "Some Name"
"percentage" => 6.6666666666667
"streets" => array:4 [▼
0 => "Some Street 1"
1 => "Some Street 2"
2 => "Some Street 3"
3 => "Some Street 4"
]
]
1 => array:4 [▼
"id" => 2489
"name" => "Some Name"
"percentage" => 3.3333333333333
"streets" => array:2 [▼
0 => "Some Street 5"
1 => "Some Street 6"
]
]
2 => array:4 [▼
"id" => 2489
"name" => "Some Name"
"percentage" => 3.3333333333333
"streets" => array:1 [▼
0 => "Some Street 6"
]
]
]
所以你可以在 $projectForms 的 dd 中看到 Some Street 6 被添加了两次,即使之前使用了 id。我想知道我可以做些什么来让我的代码只添加一次。
【问题讨论】:
-
您在最里面的 foreach 循环中的逻辑似乎没有什么意义。您循环遍历 所有 已经存在的条目,并在 每次迭代 中创建一个 array_push,在 if- 或 else-branch 中 - 因此您插入了尽可能多的新元素就像当时在
$projectForms['forms']中一样,在一个你应该只插入一个的地方。 -
@04FS 我现在看到了。这能解释为什么最后添加 Some Street 6 吗?
-
是的。当您处理最后一个数据项时,您的结果数组已经包含两个条目,分别为 id 2456 和 2489。您正在循环它们。在第一次迭代中,您要添加的 id (2489) 与您当前循环的 id 2456 不同 - 因此街道 6 作为新元素添加到您的输出数组中。在下一次迭代中,ID 确实匹配 - 因此您现在将街道 6 添加到第二个元素。
-
@04FS ooooohhhhhhh。非常感谢。如果您可以添加我可以接受的答案,以便您获得代表:)
标签: php laravel if-statement