即使我没有使用嵌套循环,它也会产生重复。我最后通过将更新数组键设置为更新密钥来进行脏修复,因此至少会重写一个副本...我发誓这不是数据。更新ID是我的主键,因此数据库中没有重复项,我现在正在查看我的数据库并且没有重复项。
无论如何,这不是一个漂亮的解决方案,但我想这解决了它:
foreach( $L_a_updates as $update ){
if( array_key_exists($update['eventId'], $L_a_events) ){
$L_a_events[ $update['eventId'] ]['updates'][ $update['updateId'] ] = $update;
}
}
以下答案虽然很好,但目前比我的能力更强。 TGIF。
这是一个星期五下午,所以它可能是非常愚蠢的东西,但我不能让它正常工作。
我有两个数组$L_a_events
和$L_a_updates
。每个事件都可以有0个或更多更新。我从数据库中获取事件,然后获取更新,然后通过循环运行它们来比较事件ID并将更新添加到它们的事件中。所以最终的结构是这样的:
Array(
[0] => Array(
['eventId'] => 2,
['message'] => 'Some message',
['updates'] => Array(
[0] => Array (
['updateId'] => 123,
['eventId'] => 2,
['message'] => 'Some update message',
)
)
)
);
我运行此循环来实现:
foreach( $L_a_events as $key => $event ){
foreach( $L_a_updates as $update ){
if($update['eventId'] == $event['eventId']){
$L_a_events[$key]['updates'][] = $update;
}
}
}
我的循环有问题吗?!数据库的结果集显示没有重复项。当我在运行循环之前打印两个数组时,它们看起来都很好。
仅在此循环之后,由于某种原因,将单个更新添加到事件数组两次。此外,每次更新都不会这样做。
所以在循环之后,我得到了这个:
而不是上面的数组 Array(
[0] => Array(
['eventId'] => 2,
['message'] => 'Some message',
['updates'] => Array(
[0] => Array (
['updateId'] => 123,
['eventId'] => 2,
['message'] => 'Some update message',
),
[1] => Array (
['updateId'] => 123,
['eventId'] => 2,
['message'] => 'Some update message',
)
)
)
);
答案 0 :(得分:1)
您不需要两个嵌套的foreach循环来执行此操作。你需要做的是:
for each update:
if event with this update's event id exists:
add update to the event's array entry
绝对没有必要循环所有事件。您已经有一个包含所有这些事件的数组。 您需要做的就是确保您的事件数组使用事件的ID作为密钥。
在PHP中,这看起来像这样:
foreach ($L_a_updates as $update) {
$key = $update['event_id'];
if (array_key_exists($key, $L_a_events)) {
$L_a_events[$key]['updates'][] = $update;
}
}
答案 1 :(得分:1)
对我来说代码似乎效率很低,虽然我看不出它有什么问题。如果$ L_a_events的键是eventId会很好,那么你可以从你需要添加的更新开始:
foreach ($L_a_updates as $update) {
$eventId = $update['eventId'];
$L_a_events[$eventId]['updates'][] = $update;
}
这将更简单,更快捷。假设如果您有更新,则存在事件。您甚至可以编写一些代码来实现它:
foreach ($L_a_events => $event)
{
$eventId = $event['eventId'];
$newEvents[$eventId] = $event;
}
并使用$ newEvents而不是$ L_a_events。现在你不再有嵌套循环了。
答案 2 :(得分:0)
您的代码正常运行。根据之前的答案,它无论如何都不是最佳的。检查您的数据。
<?php
$L_a_events = array(0=>array('eventId'=>1),1=>array('eventId'=>2));
$L_a_updates = array(0=>array('updateId'=>1,'eventId'=>1),1=>array('updateId'=>2,'eventId'=>1),2=>array('updateId'=>3,'eventId'=>2));
foreach( $L_a_events as $key => $event ){
foreach( $L_a_updates as $update ){
if($update['eventId'] == $event['eventId']){
$L_a_events[$key]['updates'][] = $update;
}
}
}
print_r($L_a_events);
?>
输出:
Array
(
[0] => Array
(
[eventId] => 1
[updates] => Array
(
[0] => Array
(
[updateId] => 1
[eventId] => 1
)
[1] => Array
(
[updateId] => 2
[eventId] => 1
)
)
)
[1] => Array
(
[eventId] => 2
[updates] => Array
(
[0] => Array
(
[updateId] => 3
[eventId] => 2
)
)
)
)