Php 基于较高的点从多维数组中删除重复项
我绞尽脑汁想办法。我可以找到很多解决方案来从2d阵列中删除重复,但我需要删除值低于其他值的重复。以下是阵列:Php 基于较高的点从多维数组中删除重复项,php,arrays,Php,Arrays,我绞尽脑汁想办法。我可以找到很多解决方案来从2d阵列中删除重复,但我需要删除值低于其他值的重复。以下是阵列: Array ( [basketball] => Array ( [0] => stdClass Object ( [id] => 2 [username] => Beans
Array
(
[basketball] => Array
(
[0] => stdClass Object
(
[id] => 2
[username] => Beans
[points] => 30
)
[1] => stdClass Object
(
[id] => 314
[username] => slights
[points] => 20
)
[2] => stdClass Object
(
[id] => 123
[username] => gibb54
[points] => 5
)
)
[soccer] => Array
(
[0] => stdClass Object
(
[id] => 2
[username] => Beans
[points] => 95
)
[1] => stdClass Object
(
[id] => 49
[username] => sans
[points] => 65
)
[2] => stdClass Object
(
[id] => 122
[username] => peano
[points] => 50
)
[3] => stdClass Object
(
[id] => 174
[username] => fordb
[points] => 30
)
[4] => stdClass Object
(
[id] => 112
[username] => danc
[points] => 30
)
)
)
如您所见,用户ID 2,Beans是篮球和足球的首选。因为他们有更多的足球分数,我需要删除他们的篮球条目,使ID314忽略0值
我需要不断地这样做,直到没有用户两次成为任何主数组值的0值
我尝试了各种foreach解决方案的组合,但我没有取得任何进展。我认为while循环更合适,但我不知道测试的条件是什么
有什么想法吗 我将循环浏览您的数据并创建一个字典,其中键是用户ID,值是附加了运动的适当用户对象。然后,您可以通过使用sport数据循环此重复数据消除的数组来重建示例数据数组结构,以确定将每个用户放置在何处 要创建重复数据消除阵列,请使用以下方法:
$deDupedData = array();
foreach ($data as $sport => $users) {
foreach ($users as $user) {
if (isset($deDupedData[$user->id])) {
if ($user->points > $deDupedData[$user->id]->points) {
$deDupedData[$user->id]->sport = $sport;
$deDupedData[$user->id]->points = $user->points;
}
} else {
$modifiedUser = $user;
$modifiedUser->sport = $sport;
$deDupedData[$user->id] = $modifiedUser;
}
}
}
// Now reconstruct your array...
我将遍历您的数据并创建一个字典,其中键是用户ID,值是附加了运动的适当用户对象。然后,您可以通过使用sport数据循环此重复数据消除的数组来重建示例数据数组结构,以确定将每个用户放置在何处 要创建重复数据消除阵列,请使用以下方法:
$deDupedData = array();
foreach ($data as $sport => $users) {
foreach ($users as $user) {
if (isset($deDupedData[$user->id])) {
if ($user->points > $deDupedData[$user->id]->points) {
$deDupedData[$user->id]->sport = $sport;
$deDupedData[$user->id]->points = $user->points;
}
} else {
$modifiedUser = $user;
$modifiedUser->sport = $sport;
$deDupedData[$user->id] = $modifiedUser;
}
}
}
// Now reconstruct your array...
为什么是连续循环?通过一行并同时查找另一行中的每个条目似乎就足够了。如果您发现了一个重复的,那么删除一个较低的点。当然,因为两个索引都会更改,所以必须维护一个从0开始的独立索引。while条件为“当前第一个数组索引小于第一个数组长度”。只有在给定的步骤中没有删除第一个数组中的元素时,才能增加索引。例如,在我的实际场景(100)中有两行以上。为什么要连续循环?通过一行并同时查找另一行中的每个条目似乎就足够了。如果您发现了一个重复的,那么删除一个较低的点。当然,因为两个索引都会更改,所以必须维护一个从0开始的独立索引。while条件为“当前第一个数组索引小于第一个数组长度”。只有在给定的步骤中没有删除第一个数组中的元素时,才能增加索引。例如,在我的实际场景(100)中有两行以上。