我正在循环两个数组(健身房和游戏),并比较$体操的‘id’值和$游戏‘健身房_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 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我该怎么重写这个?
发布于 2014-06-25 18:56:27
试试这样的东西。
<?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>
<?}
}
}
?>发布于 2014-06-25 18:58:31
我对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 } ?>https://stackoverflow.com/questions/24416232
复制相似问题