我正在尝试比较两个多维数组($allSessions
,我的主数组和$userSessions
中的非匹配值,我的内部数组......其中的所有内容都应该在{{1}之内},但结构不同)我的方法是在foreach循环中使用foreach。
除了一个(当$allSessions
只包含一个项目时),这在大多数情况下都适用。
我想知道这个bug是否是由循环中的这个循环引起的?当因为$ userSessions只包含1个项目而导致错误时,返回的$userSession
数组包含每个项目的倍数......
$unregistered
答案 0 :(得分:0)
在你拥有它的方式中,你将得到每个不匹配的元素。
假设您与$allSessions
中的a,b,c和$userSessions
中的a,b,c完全匹配。在你的第一个外环中你有'a'。在内循环中,您将为$ unregistered添加'b'和'c',因为它们不匹配。然后你继续在你的外循环中'b'并在你的内循环中添加'a'和另一个'c'副本。等等。
我很漂亮你将不得不以不同的方式构建它。您必须检查 $userSessions
中的每个元素,并且只有在找不到任何匹配项时才会转到$allSessions
中的下一个元素:
foreach ($allSessions as $session) {
foreach ($userSessions as $user) {
if ($user["entry_data"]["session-participant-session"]["id"] === $session["id"])
continue 2; // this goes to the next element in $allSessions
}
array_push($unregistered, $session);
}
如果您不熟悉continue
:
foreach ($allSessions as $session) {
$found = false;
foreach ($userSessions as $user) {
if ($user["entry_data"]["session-participant-session"]["id"] === $session["id"]) {
$found = true;
break; // an optimization - not strictly necessary
}
}
if (!$found)
array_push($unregistered, $session);
}