2016-02-12 2 views
1

Как установить переменную name или name1 в значение атрибута имени $ event? Когда я выхожу через кодовое имя, это равенство simplexmlobject без значения, а name2 - null.simplexml_load_string получение атрибутов

$ name3 = $ event-> attributes() -> name; тоже не работает.

Я смущен о том, как это правильно использовать.

$curl = curl_init(); 

curl_setopt_array($curl, Array(
    CURLOPT_URL   => 'http://odds.smarkets.com/oddsfeed.xml', 
    CURLOPT_RETURNTRANSFER => TRUE, 
    CURLOPT_ENCODING  => 'UTF-8' 
)); 

$data = curl_exec($curl); 
curl_close($curl); 

$xml = simplexml_load_string($data); 
$football = array(); 
foreach($xml->event as $event){ 
if($event->attributes()->type == "Football match"){ 
    $att = $event->attributes(); 
    $name = $att['name']; 
    $name2 = $att->attributes()->name; 
    $name3 = $event->attributes()->name; 
    $football[] = $event; 
} 
} 

foreach($football as $game){ 
    if($game->attributes()->name == "Sunderland vs. Manchester United"){ 
    $a = $game; 
    } 
} 
+0

это не работает? да это – Ghost

+0

Я получаю пустой объект simplexmlobject. Это работает $ game-> attributes() -> name == «Сандерленд против Манчестер Юнайтед», но $ name = $ event-> attributes() -> name; не. – user794846

ответ

0

Некоторые из сценариев работают, он получает игру Sunderland. Та часть, которая не имеет смысла, являются следующие:

$att = $event->attributes(); // gets all the attributes 
// using `$att` then invokes the attributes method 
$name2 = $att->attributes()->name; 

Вам не нужно использовать ->attributes над $att он уже имеет атрибуты.

Если вы хотите найти, что Sunderland игр, просто удалить некоторые его Ненужные части:

$xml = simplexml_load_string($data); 
$football = array(); 
foreach($xml->event as $event){ 
    if($event->attributes()->type == "Football match"){ 
     $football[] = $event; // push foot ball matches 
    } 
} 

foreach($football as $game){ 
    // search for sunderland game 
    if($game->attributes()->name == "Sunderland vs. Manchester United"){ 
     $a = $game; 
    } 
} 

print_r($a); // checker 

Если вы действительно хотите, чтобы назначить это конкретное имя в переменный, просто типаж атрибута в (string), ала :

$name = (string) $event->attributes()->name; 

Edit: Просто зайдите на соответствующий уровень, используя foreach, если вы должны. Просто добавьте is_array, чтобы сделать некоторые проверки. Некоторые уровни имеют плоский по ценам. Некоторые из них предлагают несколько цен на некоторые предложения. Соответственно сделайте это. Чтобы ты, вот пример:

$match = 'Sunderland vs. Manchester United'; 
foreach($football as $game){ 
    if($game->attributes()->name == $match){ 
     // if that game is found 
     foreach($game->market as $market) { 

      foreach($market->contract as $contract) { 

       // offers 
       if(!empty($contract->offers)) { 
        foreach($contract->offers->price as $price) { 
         // single level price 
         if(!is_array($price)) { 
          $decimal = (string) $price->attributes()->decimal; 
          echo $decimal; 
         } 
         // multi leveled price 
         else { 
          foreach($price as $p) { 
           $decimal = (string) $p->attributes()->decimal; 
           echo $decimal; 
          } 
         } 


        } 
       } 
       // end offers 

      } 

     } 

    } 
} 

Концепция все то же, при необходимости использовать типажи на атрибутах. Это должно заставить вас идти.

+0

примечание: черт возьми, не могу найти достойный рабочий онлайн-демонстрационный сайт, если вы хотите проверить этот ответ, код находится здесь [здесь] (http://pastebin.com/QDa8UUAg), после его копирования, вставьте его к этому коду [демонстрационный сайт] (http://stargento.com), чтобы проверить – Ghost

+0

Это был тип, который мне не хватало. Мне до сих пор трудно получить данные, которые мне нужны. В принципе, я хочу, чтобы все футбольные матчи попадали в массив стандартных объектов php, которые затем можно прокрутить и получить все шансы для каждого из них. – user794846

+0

@ user794846 Вы должны были включить, что в вопросе, теперь предоставленный ответ является неполным, а какие нечетные цены там? есть тонна данных о ценах в xml, будьте конкретны в этой части. – Ghost

0

SimpleXML обеспечивают __toString() способ вернуть значение строки:

$name = $event->attributes()->name->__toString(); 
Смежные вопросы