#php #foreach
#php #foreach
Вопрос:
Я создал слайдер для отображения списка баскетбольных матчей. У меня это работает, и в настоящее время на моем веб-сайте это выглядит так:
Я использую следующий цикл foreach для отображения данных.
<?php
uasort($json['response']['data'], function ($a, $b) {
if ($a['matchTime']==$b['matchTime']) return 0;
return $a['matchTime']>$b['matchTime'] ? 1 : -1;
});
foreach($json['response']['data'] as $item) {
if ($item['competitionName'] == 'Junior SS Premiership Zone 3' ) {
continue;}
if ($item['competitionName'] == 'CSW Division 1' ) {
continue;}
if ($item['competitionName'] == 'Season Showdown 19' ) {
continue;}
if ($item['competitionName'] == 'SS19 Challengers' ) {
continue;}
if ($item['competitionName'] == 'SS20 Challengers' ) {
continue;}
if ($item['competitionName'] == 'SS20 Pre-Season' ) {
continue;}
if ($item['competitionName'] == 'Schick AA Zone 3 Premierships' ) {
continue;}
if ($item['competitionName'] == 'New World Series 2018' ) {
continue;}
if ($item['competitionName'] == 'SS18 Challengers' ) {
continue;}
print'
<li class="item">
<a class="item-link" href="/schedule">
<div class="game-meta game-date date-format">
<span class="date-month">'; $matchtime = $item['matchTime']; echo date('M', strtotime($matchtime)); print'</span>'; $matchtime = $item['matchTime']; echo date('j', strtotime($matchtime));
print '</div>';
foreach ($item["competitors"] as $teams){
print '
<div class="game-meta game-team">
<img class="game-team__logo game-team__logo-tc" alt="Tawa" src="https://summerseries.nz/wp-content/themes/SS/logos/'; echo $teams['teamCode']; print '.svg">
<div class="game-team__abbrev">'; echo $teams['teamCode']; print'</div>
</div>
<div class="game-meta game-vs">vs</div>';
};
print ' <div class="game-time">'; $matchtime = $item['matchTime']; echo date('g:i A', strtotime($matchtime)); print'</div>
</a>
</li>';
} ?>
Он работает нормально. Я получаю данные, но мой цикл foreach показывает <div class="game-meta game-vs">vs</div>
дважды, что должен делать foreach. Я хочу удалить это, чтобы оно отображалось только в середине. Прямо сейчас изображение показывает КОМАНДУ против КОМАНДЫ, против которой оно должно показывать только КОМАНДУ против КОМАНДЫ.
Есть какой-нибудь способ сделать это? Я пытался сделать это переменной в разделе continue, но ему это не понравилось.
Спасибо!
Комментарии:
1. если $item [«конкуренты»] всегда содержит 2 элемента, я чувствую, что вам не нужен цикл for там.
2. да. просто используйте два
3. Не ваш вопрос, НО вы могли бы значительно упростить это, поместив все
continue
значения в массив, используяin_array
with$item['competitionName']
.4. а также проверьте php.net/manual/en/function.next.php функция. это также может соответствовать вашим потребностям.
5. @user3783243 это неплохая идея! Я поработаю над этим, это может немного помочь! Спасибо!
Ответ №1:
рад помочь!
Кажется, что в игре участвуют только две команды, поэтому просто измените код С:
foreach ($item["competitors"] as $teams){
print '
<div class="game-meta game-team">
<img class="game-team__logo game-team__logo-tc" alt="Tawa" src="https://summerseries.nz/wp-content/themes/SS/logos/'; echo $teams['teamCode']; print '.svg">
<div class="game-team__abbrev">'; echo $teams['teamCode']; print'</div>
</div>
<div class="game-meta game-vs">vs</div>';
};
Для:
print '
<div class="game-meta game-team">
<img class="game-team__logo game-team__logo-tc" alt="Tawa" src="https://summerseries.nz/wp-content/themes/SS/logos/'; echo $item["competitors"][0]['teamCode']; print '.svg">
<div class="game-team__abbrev">'; echo $item["competitors"][0]['teamCode']; print'</div>
</div>
<div class="game-meta game-vs">vs</div>';
print '
<div class="game-meta game-team">
<img class="game-team__logo game-team__logo-tc" alt="Tawa" src="https://summerseries.nz/wp-content/themes/SS/logos/'; echo $item["competitors"][1]['teamCode']; print '.svg">
<div class="game-team__abbrev">'; echo $item["competitors"][1]['teamCode']; print'</div>
</div>';
Если в игре участвуют более 2 команд, пожалуйста, скажите мне, и я изменю решение
Желаю вам хорошего дня ~
Ответ №2:
Подсчитайте, сколько раз вы прошли цикл, и выводите «vs» <div>
только в том случае, если вы не на последней итерации:
$i = 0; // How many teams we've printed so far
foreach ($item["competitors"] as $teams){
print '
<div class="game-meta game-team">
<img class="game-team__logo game-team__logo-tc" alt="Tawa" src="https://summerseries.nz/wp-content/themes/SS/logos/'; echo $teams['teamCode']; print '.svg">
<div class="game-team__abbrev">'; echo $teams['teamCode']; print'</div>
</div>
';
if ( $i < sizeof($item["competitors"]) ) {
print '
<div class="game-meta game-vs">vs</div>
';
}
}