2015-12-04 1 views
0

У меня есть таблица с результатами (теннисный матч). И цель - смелый победитель матча. Я сделал цикл, который отлично работает, если match имеет 3 набора, но если у меня есть 2 набора, он не показывает результат, он показывает (полужирный) только победитель, потому что у меня есть нуль в этих столбцах (g5, g6) в таблице. Как отобразить эти результаты с двумя наборами с пустыми столбцами?Как смелый текст из петли foreach

This is my code. 

<?php 
      global $wpdb; 
      $result = $wpdb->get_results ("SELECT challenger,challenged, date_match, CONCAT(g1,':',g2,' ',g3,':',g4,' ',g5,':',g6) AS result1, 
              g1,g2,g3,g4,g5,g6 
              FROM barbara_results 
              WHERE date_match 
              BETWEEN '2015-11-21' AND '2015-12-06' 
              ORDER BY date_match ASC"); 

      foreach ($result as $print) { 
       echo '<td>'; 
        if (((int) $print->g1 > ((int) $print->g2)) && ((int) $print->g3 > ((int) $print->g4))|| ((int) $print->g5 > ((int) $print->g6))){ 
         echo '<strong>'.$print->challenger.'</strong>'; 
        } 
       else{ 
        echo $print->challenger.'</td>'; 
       } 

       echo '<td>'; 
       if (((int) $print->g2 > ((int) $print->g1)) && ((int) $print->g4 > ((int) $print->g3))|| ((int) $print->g6 > ((int) $print->g5))){ 
        echo '<strong>'.$print->challenged.'</strong>'; 
       } 
       else{ 
        echo $print->challenged.'</td>'; 
       } 
       echo '<td>' . date('d.m.Y.', strtotime($print->date_match)).'</td>'; 
       echo '<td>' . $print->result.'</td>'; 
       echo '<td>' . $print->result1.'</td>'; 
       echo '</tr>'; 
      } 
      ?> 
+0

запустить 'if' заявление, чтобы проверить, если вы хотите, чтобы определенная линия жирным шрифтом, а затем применить дерзновение с переменной, которая содержит правильный синтаксис HTML. , – Martin

+0

Прошу прощения. Я начинаю. Можете ли вы показать мне два ответа или объяснить немного больше? – Barbara

+0

Прошу прощения. Я сделал огромную ошибку в начале. Я думал, что было бы нормально суммировать эти цифры, но я понял, что это так неправильно. Потому что у меня есть один результат с одинаковой суммой, и он ничего не будет смелым. Я думал, что мне нужно сделать несколько комбинаций вроде: если g1> g2 и g3> g4 полужирный соперник, оставшийся смелым. Если g1> g2 и g5> g6 жирным претендентом, то жирным бросается вызов. Могу ли я сделать это здесь? Пожалуйста, помогите мне закончить это? И я снова сожалею. – Barbara

ответ

0

Если добавить отдельные столбцы g1, g2, ..., g6 к вашему SELECT заявление, как показано в приведенном ниже примере, вы можете использовать (и формат) эти результаты столбцов индивидуально в вашем foreach цикле.

// in the query: 
$result = $wpdb->get_results ("SELECT g1, g2, g3, g4, g5, g6 ..."); 

Согласно заметкам ранее, нет никаких результатов галстука для g5 и g6. Это должно означать, что в любое время g5 и g6 есть NOT NULL, мы можем найти победителя только от простого сравнения if (g5 > g6) ... else .... Если g5 и g6 - NULL, это должно указывать, что нет ссылок на галстук для g1 > g2 и g3 > g4 сравнений в последнем else блоке, что позволяет нам найти там победителя.

В следующем примере показан один из способов проверить, является ли значение NULL с помощью функции is_null.

// in the foreach loop: 
foreach ($result as $output) { 
    // check if g5 and g6 are NOT NULL 
    // this allows us to avoid the g1, g2, g3, g4 else statement below 
    if (!is_null($output->g5) && !is_null($output->g6)) { 
    if ((int) $output->g5 > (int) $output->g6) { 
     echo '<strong>' . $output->challenger . '</strong>'; 
    } else { 
     echo '<strong>' . $output->challenged . '</strong>'; 
    } 
    } else { 
    if (((int) $output->g1 > (int) $output->g2) && 
     ((int) $output->g3 > (int) $output->g4)) { 
     echo '<strong>' . $output->challenger . '</strong>'; 
    } else { 
     echo '<strong>' . $output->challenged . '</strong>'; 
    } 
    } 
} 

Примечание: В (int) части убедитесь, что вы проверяете значения целых чисел из ваших столбцов базы данных g1, g2, ..., g6.

+0

Я хочу показать такой же результат на моем сайте: 7: 5 6: 7 10: 8 (результат тенниса), и я хочу показать его в одной колонке. И из-за этого я использовал concat. Хорошо, я попробую! – Barbara

+1

Отличный !! Я действительно ценю это! Спасибо! – Barbara

+0

Нет, он не будет показывать результаты без третьего набора. Можете ли вы поместить его в свой код. Может, я сделал что-то не так с вставкой в ​​код? – Barbara

0
<?php 
     global $wpdb; 
     $result = $wpdb->get_results ("SELECT challenger,challenged, date_match, CONCAT(g1,':',g2,' ',g3,':',g4,' ',g5,':',g6) AS result1, 
             g1,g2,g3,g4,g5,g6 
             FROM barbara_results 
             WHERE date_match 
             BETWEEN '2015-11-21' AND '2015-12-06' 
             ORDER BY date_match ASC"); 

     foreach ($result as $print) { 

      $sum1 = (int) $print->g1 + (int) $print->g3 + (is_numeric($print->g5) ? (int) $print->g5 : 0); 
      $sum2 = (int) $print->g2 + (int) $print->g4 + (is_numeric($print->g6) ? (int) $print->g6 : 0); 
      $challenger = ($sum1 > $sum2) ? '<strong>'.$print->challenger.'</strong>' : $print->challenger; 

      echo '<tr>'; 
      echo '<td>' . $challenger.'</td>'; 
      echo '<td>' . $print->challenged.'</td>'; 
      echo '<td>' . date('d.m.Y.', strtotime($print->date_match)).'</td>'; 
      echo '<td>' . $print->result.'</td>'; 
      echo '<td>' . $print->result1.'</td>'; 
      echo '</tr>'; 
     } 
?> 
+0

Отличный !! Спасибо! Теперь я понимаю. У меня есть еще один вопрос. Что делать, если g5 и g6 не существует? У меня есть один результат 6: 1 6: 1, и он ничего не покажет, потому что у нас есть $ print-> g5 и $ print-> g6. Как сделать внутри это утверждение? – Barbara

+0

@Barbara Я добавил некоторую логику, чтобы проверить, является ли переменная числом. Если нет, то он добавит 0. – digout

+0

В первом случае он работает (перед редактированием). Теперь у меня проблема с is_number. Теперь он показывает is_number, как неопределенная функция, и ничего не показывает. – Barbara

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