php - 有效地对多个 PHP foreach 循环使用相同的代码

标签 php arrays loops foreach

我有几组不同的数据通过 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/

相关文章:

arrays - 带有要排列的行的标量

R:将元素添加到 tryCatch 循环中的列表

php - XMPP 与 HTML5 Websocket?

c - 如何显示字符数组?

php - 在 php/mysqli 中使用存储过程检索多个结果集

java - 替换字符串中的 char 值 (Java)

excel - VBA Excel 2007 : Need to loop copy and loop count number except zero every row above

c - LinkedList 将字符串输入节点并打印列表?

php - 如何上传 JSON 文件以在 Javascript 运行时创建对象而不更改服务器端脚本?

php - wampserver drupal phpinfo 始终显示