首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重用PHP函数而不是重复

希望有人能提供帮助,我目前正在为游戏手册编写页面,我正在使用这里找到的两个函数,一个是从html文件中提取文本/格式,另一个是从CSV文件中提取数据并将其插入到表中。如果我在页面中包含多个部分,我就已经复制了代码。结果的一个示例可以在here中找到

正如您所看到的,页面显示了三个部分,这就是我想要的结果。我想知道的是,有没有比我现在这样做更有效的方法,那就是复制代码,只需修改每个我想导入的文件的变量?如您所见,变量名称是由页面名称设置的。下面是我使用的代码。

代码语言:javascript
运行
AI代码解释
复制
//function to display csv as table
    function csvimport($filename, $header = false)
    {

        $handle = fopen($filename, "r");
        echo '<table id="subman">';
        //display header row if true
        if ($header) {
            $csvcontents = fgetcsv($handle);
            echo '<tr>';
            foreach ($csvcontents as $headercolumn) {
                echo "<th>$headercolumn</th>";
            }
            echo '</tr>';
        }
        // displaying contents
        while ($csvcontents = fgetcsv($handle)) {
            echo '<tr>';
            foreach ($csvcontents as $column) {
                echo "<td>$column</td>";
            }
            echo '</tr>';
        }
        echo '</table>';
        fclose($handle);
    }

然后,我使用以下内容选择要使用的CSV文件,并将其显示为表。

代码语言:javascript
运行
AI代码解释
复制
csvimport("$data", "true");

由变量$data定义

代码语言:javascript
运行
AI代码解释
复制
//get page name from link or use manual as default
    $page = $_GET['page'] ?? 'manual';

    //combine page name with suffix and set page variables
    $data = "{$page}.csv";

我对html使用了类似的方法,如下所示。

代码语言:javascript
运行
AI代码解释
复制
$myfile = fopen("$text", "r") or die("Unable to open file!");
    echo fread($myfile, filesize("$text"));
    fclose($myfile);

所以我可以让多个文件显示,然后我复制代码并添加这些变量。

代码语言:javascript
运行
AI代码解释
复制
$data = "{$page}.csv";
$data2 = "{$page}2.csv";
$data3 = "{$page}3.csv";

希望我已经解释了我自己和我想问的问题。

提前感谢大家的阅读:)

EN

回答 1

Stack Overflow用户

发布于 2018-03-28 07:52:58

你应该学习现代web框架是如何工作的。它们将view, the model and the controller分开。模型是应用程序的逻辑体系结构,控制器是路由和呈现每个页面的代码,视图是所有html输出和样式。

查看你的代码,我会首先分离视图。在这里,我已经完成了我所说的第一步。这只是第一步,我推荐你到learn a few (a lot of) programming concepts,使用composer组件,深入研究百万php (微)frameworksroll your own中的一个。现在有很多机会去做php the right way

控制器和模板的分离

index.php

代码语言:javascript
运行
AI代码解释
复制
function csvimport($filename, $delimiter = ',') {

  $handle = fopen($filename, "r");
  $output = [];

  while ($csvcontents = fgetcsv($handle, 1024, $delimiter)) {
    $output[] = $csvcontents;
  }
  fclose($handle);
  return $output;
}

function tpl($fileName, $data = false) {

  $rendered = "";
  if (file_exists($fileName)) {
    ob_start();
    extract($data);
    require($fileName);
    $rendered = ob_get_contents();
    ob_end_clean();
  }

  return $rendered;
}

$data['header'] = true;
$data['csvcontents'] = csvimport(CSV_FILE, ';');

echo tpl('table.tpl.php', $data);

table.tpl.php

代码语言:javascript
运行
AI代码解释
复制
<table id="subman">
  <?php
  $first = true;
  foreach ($csvcontents as $row) :
    if ($first) :
      $first = false;
      if ($header) :
        $tag = 'th';
      else:
        continue;
      endif;
    else:
      $tag = 'td';
    endif;
    ?>
    <tr>    
      <?php foreach ($row as $column) : ?>
        <<?= $tag ?>><?= $column ?></<?= $tag ?>>
      <?php endforeach; ?>
    </tr>
  <?php endforeach; ?>

</table>

索引有一些读取csv和呈现任何模板的函数,并且模板保存了所有的html输出。这只是第一种方法,远不适合作为生产就绪的代码,使用风险和never trust user input自负

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49516542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档