2016-01-31 3 views
0

Я не понимаю, почему мое if-условие не работает.PHP, если условие и foreach внутри

С этой страницы HTML:

http://www.olympic.org/olympic-results/london-2012/archery

Я пытаюсь извлечь информацию, как олимпийское издание, название пробного и т.д. извлечь мужское событие с этим кодом:

$html=file_get_html('http://www.olympic.org/olympic-results/london-2012/archery'); 


foreach($html->find('div') as $element) { 

    if ($element->id == 'gamesSelect') 
    { 
     $Game = $element->find('option[selected]', 0)->plaintext . '<br>'; 
    } 

    if ($element->id == 'sportSelect') 
    { 

     $Sport = $element->find('option[selected]', 0)->plaintext . '<br>'; 
    } 

    if ($element->class == 'man') 
    { 
     foreach($html->find('span.trial_name') as $e_trial) 
     { 

      $Event = $e_trial->innertext . '<br>'; 

     } 
    } 
} 

В последнем последнем условии я поставил цикл foreach, чтобы извлечь только этот текст:

Мужской Индивидуальный (FITA Олимпийский раунд - 70 м) команда для мужчин (FITA Olympic раунда - 70 м)

Но на самом деле я получаю все четыре пробные мероприятия:

Мужской Индивидуальный (FITA Олимпийского раунда - 70 м) Команда для мужчин (FITA Олимпийский раунд - 70 м) Женская индивидуальная (FITA Олимпийский раунд - 70 м) Женская Team (FITA Олимпийский раунд - 70 м)

Почему такое поведение? Я не понимаю, так как есть условие, только для мужчин. Как я могу это исправить?

+2

Разве вы не ищете 'element' вместо' html'? – RST

+0

Правильно @RST. вместо foreach ($ html-> find ('span.trial_name') в качестве $ e_trial) попробуйте использовать foreach ($ element-> find ('span.trial_name') как $ e_trial) –

ответ

0

Попробуйте это:

$html=str_get_html(file_get_html('http://www.olympic.org/olympic-results/london-2012/archery')); 


    foreach($html->find('div') as $element) { 

     if ($element->id == 'gamesSelect') 
     { 
      $Game = $element->find('option[selected]', 0)->plaintext . '<br>'; 
     } 

     if ($element->id == 'sportSelect') 
     { 

      $Sport = $element->find('option[selected]', 0)->plaintext . '<br>'; 
     } 

     if ($element->class == 'man') 
     { 
      foreach($element->find('span.trial_name') as $e_trial) 
      { 

       $Event = $e_trial->innertext . '<br>'; 

      } 
     } 
0

Извините, но я просто решил самостоятельно. В последнем случае условие я ставлю $ элемент, а не $ HTML и теперь он работает

0

Хорошо, после того, как решил я продолжал мой скрипт, добавив следующий код:

$ HTML = file_get_html («http://www.olympic.org/olympic-results/london-2012/archery»);

Еогеасп ($ html-> найти ('DIV') как $ элемента) {

if ($element->id == 'gamesSelect') 
{ 
    $Game = $element->find('option[selected]', 0)->plaintext . '<br>'; 
} 

if ($element->id == 'sportSelect') 
{ 

    $Sport = $element->find('option[selected]', 0)->plaintext . '<br>'; 
} 

if ($element->class == 'man') 
{ 
    foreach($element->find('span.trial_name') as $e_trial) 
    { 

     $Event = $e_trial->innertext . '<br>'; 

     if ($element->class == "medals gold") 
     { 

      foreach($element->find('td.name') as $e_name) 
      { 
       $Name = $e_name->innertext . '<br>'; 
       echo $Name; 
      } 
     } 


    } 
} 

}

Я не понимаю, как впустить его в последнем случае условие. Разве это не то же самое из другого if ($ element-> class == 'man')?

Смежные вопросы