Использование идентификатора атрибута xml в URL-адресе страницы и на странице

Я получаю данные о спортивных событиях через xml-канал, для этого я использую simplexml. Пока что у ive есть цикл foreach, который перебирает все события и выводит их в виде списка имен событий, заключенных в теги <a>, указывающих на страницу event.php? = Id (идентификатор определяется через атрибут событий с именем id).

для этого я использую

<?php
    $xml = simplexml_load_file("openbet_cdn.xml");
    foreach($xml->response->williamhill->class->type->market as $market) {
        $market_attributes = $market->attributes();
        printf("<a href=\"event.php?id=%s\">%s</a>\n", 
                    $market_attributes->id, 
                    $market_attributes->name);
    }
?>

я использую канал http://whdn.williamhill.com/pricefeed/openbet_cdn?action=template&template=getHierarchyByMarketType&classId=5&marketSort=HH&filterBIR=N

То, с чем у меня проблемы, находится на моей странице event.php, я продолжаю получать первое событие в отображаемом xml-канале. Для этого я использую:

<?php 
  foreach ($xml->response->williamhill->class->type->market->participant as $participant) {   
  $participant_attributes = $participant->attributes();  

    echo "<tr>";
      // EVENT NAME
      echo "<td>";
        echo "<a href=".$market_attributes['url'].">";
        echo $participant_attributes['name'];//participants name
        echo "</a>";
      echo"</td>";

      //ODDS
      echo "<td>";
        echo $participant_attributes['odds'];
      echo "</td>"; 
    echo "</tr>";
  } 
?>

Я понимаю, почему это происходит потому, что я не ссылаюсь на идентификатор, который находится в URL-адресе страницы события. Но я не совсем уверен, как это сделать, есть идеи, как с этим справиться?


person sam    schedule 01.02.2013    source источник


Ответы (1)


Вам просто нужно добавить if в цикл, чтобы вы настраивали таргетинг только на идентификатор события, который совпадает с идентификатором в строке запроса. Вложенный цикл также необходим, потому что вы хотите перебрать каждый рынок, чтобы найти соответствующий id, а затем перебрать каждого из его участников.

  foreach ($xml->response->williamhill->class->type->market as $market) {   

    if($market->attributes()->id == $_GET['id']) {

        foreach($market->participant as $participant) {
            $participant_attributes = $participant->attributes();  

            echo "<tr>";
              // EVENT NAME
              echo "<td>";
                echo "<a href=".$market->attributes()->url.">";
                echo $participant_attributes['name'];//participants name
                echo "</a>";
              echo"</td>";

              //ODDS
              echo "<td>";
                echo $participant_attributes['odds'];
              echo "</td>"; 
            echo "</tr>";
        }

        break; // <-- we've found the target and echo'ed it so no need to keep looping
    }
  } 
person MrCode    schedule 01.02.2013
comment
спасибо за это, что действительно странно, так это то, что если я изменяю статус IF для запуска атрибутов рынка, а не атрибутов участников (и изменяю остальную часть скрипта в соответствии с этим), он работает, но запускает его на атрибутах участников, он не эхо все, что выводится на экран, кроме моего верхнего и нижнего колонтитула, которые включены в php. есть идеи, почему это может быть? - person sam; 01.02.2013
comment
Моя ошибка - см. Мою правку. Вам нужен вложенный foreach (2 цикла). Внешний цикл проходит по рынкам, чтобы найти тот, который соответствует id, затем внутренний цикл проходит по каждому участнику рынка. - person MrCode; 01.02.2013