У меня есть данные, содержащие оценки людей в лигах, и я пытаюсь получить набор результатов по 4 для каждой лиги.Если я нахожусь в топ-4, то он возвращает топ-4, но если нет, то он должен вернуться на 1-е место, и выше и ниже меня и меня.
в настоящее время у меня 1-йдо 4-го параметра, который я заполняю, который затем добавляется в возвращаемый массив.В настоящее время этот код работает, хотя, если в лиге меньше 4, это не правильно, и также не работает, если я нахожусь в топ-4.
Моя проблема больше, у меня большойгромоздким, если еще, если блок, должен быть более аккуратный / лучший подход, чем то, что я сделал?Я что-то упустил?
Входные данные:
array(35) {
[0]=>
array(11) {
["groupID"]=>
int(1)
["groupName"]=>
string(6) "A Group"
["driverID"]=>
int(1)
["screenName"]=>
string(12) "MrBlog"
["score"]=>
int(9231)
["position"]=>
float(1)
},
{
["groupID"]=>
int(1)
["groupName"]=>
string(6) "A Group"
["driverID"]=>
int(2)
["screenName"]=>
string(12) "Saxon"
["score"]=>
int(7276)
["position"]=>
float(2)
},
{
["groupID"]=>
int(4)
["groupName"]=>
string(6) "All Drivers"
["driverID"]=>
int(10)
["screenName"]=>
string(12) "Anonymous"
["score"]=>
int(9897)
["position"]=>
float(1)
},
{
["groupID"]=>
int(4)
["groupName"]=>
string(6) "All Drivers"
["driverID"]=>
int(17)
["screenName"]=>
string(12) "Joe"
["score"]=>
int(9777)
["position"]=>
float(2)
},
{
["groupID"]=>
int(4)
["groupName"]=>
string(6) "All Drivers"
["driverID"]=>
int(7)
["screenName"]=>
string(12) "Wavey Davey"
["score"]=>
int(9564)
["position"]=>
float(3)
},
{
["groupID"]=>
int(4)
["groupName"]=>
string(6) "All Drivers"
["driverID"]=>
int(29)
["screenName"]=>
string(12) "White Van Man"
["score"]=>
int(9432)
["position"]=>
float(4)
},
{
["groupID"]=>
int(4)
["groupName"]=>
string(6) "All Drivers"
["driverID"]=>
int(4)
["screenName"]=>
string(12) "Dan"
["score"]=>
int(9278)
["position"]=>
float(5)
},
{
["groupID"]=>
int(4)
["groupName"]=>
string(6) "All Drivers"
["driverID"]=>
int(1)
["screenName"]=>
string(12) "MrBlog"
["score"]=>
int(9231)
["position"]=>
float(6)
},
{
["groupID"]=>
int(4)
["groupName"]=>
string(6) "All Drivers"
["driverID"]=>
int(24)
["screenName"]=>
string(12) "Big Dan"
["score"]=>
int(8742)
["position"]=>
float(7)
},
{
["groupID"]=>
int(4)
["groupName"]=>
string(6) "All Drivers"
["driverID"]=>
int(2)
["screenName"]=>
string(12) "Saxon"
["score"]=>
int(7276)
["position"]=>
float(8)
}
Желаемый вывод:
"1": {
"members": 2,
"groupName": "A Group",
"score": [
{
"groupID": 1,
"driverID": 1,
"screenName": "MrBlog",
"score": 9231,
"position": 1
},
{
"groupID": 1,
"driverID": 2,
"screenName": "Saxon",
"score": 7276,
"position": 2
}
]
},
"4": {
"members": 7,
"groupName": "All Drivers",
"score": [
{
"groupID": 4,
"driverID": 10,
"screenName": "Anonymous",
"score": 9897,
"position": 1
},
{
"groupID": 4,
"driverID": 17,
"screenName": "Joe",
"score": 9777,
"position": 2
},
{
"groupID": 4,
"driverID": 7,
"screenName": "Wavey Davey",
"score": 9564,
"position": 3
},
{
"groupID": 4,
"driverID": 29,
"screenName": "White Van Man",
"score": 9432,
"position": 4
},
{
"groupID": 4,
"driverID": 4,
"screenName": "Dan",
"score": 9278,
"position": 5
},
{
"groupID": 4,
"driverID": 1,
"screenName": "MrBlog",
"score": 9231,
"position": 6
},
{
"groupID": 4,
"driverID": 24,
"screenName": "Big Dan",
"score": 8742,
"position": 7
},
{
"groupID": 4,
"driverID": 2,
"screenName": "Saxon",
"score": 7276,
"position": 8
}
]
}
Код:
foreach ($leagues as $aLeagueID => $aLeague) {
$return[$aLeague['groupID']]['members'] = $aLeague['position'];
// New group ID?
if ($groupID != $aLeague['groupID']) {
// get our position
if($aLeague['_driverID'] == $driverID)
$myPos = $aLeague['position'];
$return[$aLeague['groupID']]['groupName'] = $aLeague['groupName'];
$return[$aLeague['groupID']]['score'][] = $aLeague;
} else if ($groupID == $aLeague['groupID']) {
if($aLeague['_driverID'] == $driverID)
$myPos = $aLeague['position'];
if ($stop) {
$fourth = $aLeague;
$return[$aLeague['groupID']]['score'][] = $first;
$return[$aLeague['groupID']]['score'][] = $second;
$return[$aLeague['groupID']]['score'][] = $third;
$return[$aLeague['groupID']]['score'][] = $fourth;
$stop = false;
$myPos = 0;
}
// If we dont know our position yet
else if($myPos == 0 && $aLeague['position'] <= 4) {
$second = $third;
$third = $fourth;
$fourth = $aLeague;
#$return[$aLeague['groupID']]['score'][] = $prev;
#$return[$aLeague['groupID']]['score'][] = $aLeague;
}
// IF we are in the top 4
else if($myPos <= 4 && $aLeague['position'] <= 4) {
$second = $third;
$third = $fourth;
$fourth = $aLeague;
}
// else show first place and our position + / - 1
else if($myPos >= 5) {
$stop = true;
$second = $prev;
$third = $aLeague;
}
$prev = $aLeague;
}
$groupID = $aLeague['groupID'];
}