#php #arrays
#php #массивы
Вопрос:
Я перебираю два массива (тренажерные залы и игры) и сравниваю значение $gym[‘id’] со значением $game[‘gym_id’]. Если два значения совпадают, я показываю дату и время игры, как показано ниже.
<?php
$gyms = sw::shared()->gyms->getAll();
$games = sw::shared()->games->getAll();
?>
<?php foreach ($gyms as $gym) { ?>
<?php foreach ($games as $game) { ?>
<?php if ($game['gym_id'] == $gym['id']) { ?>
<?php $match ; ?>
<?php echo $gym['gym_name']; ?><br>
<?php echo $game['date']; ?> <?php echo $game['time']; ?><br>
<?php } ?>
<?php } ?>
<?php } ?>
Я также отображаю название тренажерного зала с помощью $gym[‘gym_name’], но я хочу, чтобы название тренажерного зала отображалось только один РАЗ, и если в этом тренажерном зале есть игры, это означает, что это будет выглядеть так:
GYM 1 NAME
GAME 1 DATE GAME 1 TIME
GAME 2 DATE GAME 2 TIME
GAME 3 DATE GAME 3 TIME
GYM 2 NAME
GAME 4 DATE GAME 4 TIME
GAME 5 DATE GAME 5 TIME
GAME 6 DATE GAME 6 TIME
Как мне это переписать?
Комментарии:
1. повторите название тренажерного зала во внешнем цикле, а не во внутреннем.
2. Нет, потому что это показало бы все тренажерные залы, даже если в тренажерных залах им не назначены игры. Я хочу показывать только спортивные залы с играми.
3. Я думаю, он имеет в виду, повторяйте его только в конце, чтобы вы получили последний результат. Или установите значение, которое вы ищете, в другую переменную и повторите ЭТО.
4. Это похоже на то, что нормализованная база данных может решить очень быстро.
5. @cpcdev попробуйте проверить, есть ли в тренажерном зале игры, прежде чем
Ответ №1:
Попробуйте что-то вроде этого.
<?php
$gyms = sw::shared()->gyms->getAll();
$games = sw::shared()->games->getAll();
function getGymGames($gym){
$gymGames = array();
foreach ($games as $game) {
if ($game['gym_id'] == $gym['id']) {
array_push($gymGames,$game);
}
}
return $gymGames;
}
?>
<?php
foreach ($gyms as $gym) {
$gymGames = getGymGames($gym);
if(count($gymGames) > 0){?>
<?=$gym['gym_name'];?><br />
<?foreach($gymGames as $game){
$match ;
?>
<?= $game['date']; ?><br />
<?= $game['time']; ?><br>
<?}
}
}
?>
Ответ №2:
Я не совсем знаком с PHP, но почему бы не сделать логическое значение, чтобы указать, отображалось ли оно или нет, и переключить его после его отображения.
<?php
$gyms = sw::shared()->gyms->getAll();
$games = sw::shared()->games->getAll();
?>
<?php foreach ($gyms as $gym) { ?>
<?php $notDisplayed=true; ?>
<?php foreach ($games as $game) { ?>
<?php if ($game['gym_id'] == $gym['id']) { ?>
<?php $match ; ?>
<?php if($displayed) { ?>
<?php echo $gym['gym_name']; ?><br>
<?php $notDisplayed=false;?>
<?php } ?>
<?php echo $game['date']; ?> <?php echo $game['time']; ?><br>
<?php } ?>
<?php } ?>