Поскольку я работаю над веб-приложением, но я новичок в Simple XML и PHP, мне нужна помощь.
Я работаю над системой ранжирования, которая берет данные из XML Документ. Прежде всего, я начинаю получать простой XML объект, с которым я работаю.
$parse = new SimpleXMLElement('WEBSITE', NULL, TRUE);
Это мои текущие переменные, пожалуйста, не говорите об именах, это не так хорошие имена для некоторых из них, я знаю это.
$eventguid = (string) $parse->event[0]['eventguid'];
$eventtypecode = (string) $parse->event[0]['eventtypecode'];
$playformat = (string) $parse->event[0]['PlayFormat'];
$coordinator = (string) $parse->event[0]['coordinator'];
$startdate = (string) $parse->event[0]['startdate'];
$postevententry = (string) $parse->event[0]['postevententry'];
$enddate = (string) $parse->event[0]['enddate'];
// Counts how many rounds there were
$roundcount = 0;
// Counts the persons
$count = 0;
// Array der Mitspieler
$participants = [];
// Informationen zur Round in einem Array
$roundinformation = [];
// Anzahl aller gespielten Matches
$fullmatchcount = 0;
// Array der Spielergebnisse pro Runde und Match
$matchinformation = [];
// Anzahl der Informationen zu jedem Match
$matchinformationcount = 0;
// Array um zu tracken welche runde wie viele matches hatte
$matches = [];
// Count for testing purposes
$testcount = 0;
Проблема, с которой я столкнулся, заключается в том, что я перебираю объект и получаю данные из сыгранных раундов, матчей и информации о матчах. Что я могу сказать, так это то, что я считаю раунды, совпадения и информацию о матчах и начинаю помещать все в массив, вот так.
foreach ($parse->event->participation->person[$i]->attributes() as $g => $h) {
$participants[] = $h;
}
}
Это работает нормально, потому что с информацией об игроке проблем не будет.
Вот что может помешать правильной работе моего сценария:
Если информация о совпадении меньше 6
$testcount = $parse->event->matches->round[$i]->match->count();
echo "---------------------------------------------";
?>
<br>
<?php
echo "Round " . ($i + 1) . ": " . $testcount . " Matches";
?>
<br>
<?php
echo "---------------------------------------------";
?>
<br>
<?php
$matches[] = $testcount;
$testcount = 0;
for ($k = 0; $k < $matches[$i]; $k++) {
?>
<br>
<?php
echo "Round: " . ($i + 1) . " - Match: " . ($k + 1);
?>
<br>
<?php
echo "---------------------------------------------";
?>
<br>
<br>
<?php
foreach ($parse->event->matches->round[$i]->match[$k]->attributes() as $a => $b) {
echo $a . ": " . $b;
$matchinformation[] = $b;
?>
<br>
<?php
}
?>
<br>
<?php
}
}
, я беру Информация от каждого матча и каждого раунда и просто записать их в массив, match [] - это массив, который подсчитывает, сколько матчей сыграно за раунд. matchinformation [] - это массив, в котором хранится каждая информация: Игрок 1 Игрок 2 Результат Победа При проигрыше Ничья
Проблема возникает, если у игрока нет соперника в раунде. Тогда мой Player 2, Win, Loss, Draw будет отсутствовать, и результат получит значение 3.
Это все еще работает, но проблема, которую я не могу решить, состоит в том, как узнать, какая позиция в массиве относится к какому значению.
Я попытался сделать это:
for ($i = 0; $i < $matchinformationcount; $i++) {
if ($i % 6 == 0) {
echo "Player 1: {$matchinformation[$i]}";
?>
<br>
<?php
} else if ($i % 6 == 1) {
echo "Player 2 (Opponent): {$matchinformation[$i]}";
?>
<br>
<?php
} else if ($i % 6 == 2) {
echo "Outcome: {$matchinformation[$i]}";
?>
<br>
<?php
} else if ($i % 6 == 3) {
echo "Win: {$matchinformation[$i]}";
?>
<br>
<?php
} else if ($i % 6 == 4) {
echo "Loss: {$matchinformation[$i]}";
?>
<br>
<?php
} else if ($i % 6 == 5) {
echo "Draw: {$matchinformation[$i]}";
?>
<br>
<?php
echo "Match Done";
?>
<br>
<br>
<?php
}
}
Но это работает только при наличии равного количества информации о совпадении, поэтому нет ситуации, когда вместо 6 есть только 2 значения. Моя идея по модулю состоит в том, что первым значением всегда будет Player 1 и т. Д.
Но в данном случае это не работает. Потому что это происходит:
Вот как это должно выглядеть
Игрок 1: 6115138878 Игрок 2 (оппонент): 4318505686 Результат: 1 Победа: 2 Поражение: 1 Ничья: 0
Это работает в течение первых 16 раундов, после этого возникает проблемная ситуация, которая приведет к ->
ЭТО ОК Игрок 1: 4105359283 Игрок 2 (оппонент): 7031041397 Результат: 1 Победа: 2 Проигрыш: 1 Ничья: 0 Матч закончен
ЭТО НЕ Игрок 1: 99248861 Игрок 2 (Противник): 3 Результат: 6300131187 Победа: 3 Потеря: 5115189694 Ничья: 8031038544 Матч завершен
Игрок 1: 1 Игрок 2 (оппонент): 2 Результат: 1 Победа: 0 Утрата: 1319165530 Ничья: 6313650323 Матч завершен
Как я могу решить эту проблему?
Я подумал о том, чтобы проверить в ситуации, когда я помещаю информацию в массив, сколько информации содержится в этом совпадении, и если их меньше 6, это должно заполнить остальное пустыми значениями. Но я не знаю, как это сделать.