我有几组不同的数据通过 foreach 循环。每个 foreach 循环内的许多代码都是相似的,几乎相同,但我使用的是基于先前定义的数组以及放入 foreach 循环中的初始数据的变量。有没有办法将这些循环组合成某种函数,而不必将所有数据传递到函数中?
意思是,我可以在循环中定义一个函数并让它以某种方式使用该数据吗?我需要这样做,因为如果我只想显示那些具有关联数据的行,我会循环使用这些数据。但如果我想显示所有行,无论是否有关联数据,那么我需要使用不同的数组来循环。
我需要为 else
执行两个单独的循环,因为它需要获取所有排列通用的布局项和特定于此排列的布局项,然后如果有数据,我需要显示它一个方式,如果它是空的,我需要做一些不同的事情,所以我也必须检查它。
以下是使用相同数据的多个循环的示例:
if($hideempty == 'hide'){
foreach($bannerArray as $bannerID => $records){
foreach($records as $id => $record){ ?>
<tr>
<td><?php echo $record['layout_name']; ?></td>
<td><?php echo $record['company_name']; ?></td>
</tr>
<?php }
}
} else {
$layoutGroupArray = mysqli_fetch_assoc(mysqli_query($link, "SELECT `set_layout_group` FROM `SetTopics` WHERE `set_id` = $setID"));
$layoutGroup = $layoutGroupArray['set_layout_group'];
foreach($banners[0] as $bannerID => $layoutInfo){
if(isset($bannerArray[$bannerID])){
foreach($bannerArray[$bannerID] as $id => $record){ ?>
<tr>
<td><?php echo $record['layout_name']; ?></td>
<td><?php echo $record['company_name']; ?></td>
</tr>
<?php }
} else { ?>
<tr>
<td><?php echo $layoutInfo['layout_name']; ?></td>
<td>empty</td>
</tr>
<?php }
}
foreach($banners[$layoutGroup] as $bannerID => $layoutInfo){
if(isset($bannerArray[$bannerID])){
foreach($bannerArray[$bannerID] as $id => $record){ ?>
<tr>
<td><?php echo $record['layout_name']; ?></td>
<td><?php echo $record['company_name']; ?></td>
</tr>
<?php }
} else { ?>
<tr>
<td><?php echo $layoutInfo['layout_name']; ?></td>
<td>empty</td>
</tr>
<?php }
}
}
它不一定是我使用的函数,但我不确定如何有效地编写此代码。我做了很多重复,但我无法想出另一种方法来访问我需要的数据而不进行这种重复。
最佳答案
您可以重构它以使用辅助函数来回显 tr 标签,例如
function displayTableRow($layout, $company) {
echo "<tr>
<td>$layout</td>
<td>$company</td>
</tr>";
}
并在 foreach 循环中使用它,例如:
if(isset($bannerArray[$bannerID])){
foreach($bannerArray[$bannerID] as $id => $record){
displayTableRow($record['layout_name'], $record['company_name']);
}
} else {
displayTableRow($record['layout_name'], 'empty');
}
}
关于php - 有效地对多个 PHP foreach 循环使用相同的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30242230/