Устранение неполадок в PHP SimpleXML - PullRequest
0 голосов
/ 23 февраля 2020

Поскольку я работаю над веб-приложением, но я новичок в 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, это должно заполнить остальное пустыми значениями. Но я не знаю, как это сделать.

...