重用PHP函数而不是重复

时间:2018-03-27 15:10:04

标签: php function csv

希望有人可以提供协助,我目前正在为游戏手册编写页面,我正在使用我在这里找到的两个函数,一个用于从html文件中提取文本/格式,另一个用于从CSV文件中提取数据并插入进入一张桌子。如果我在页面中包含多个部分,那么我一直在复制代码。可以找到结果的示例here

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

//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文件并显示为表格。

csvimport("$data", "true");

由变量$ data

定义
//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使用类似的内容,如下所示。

$myfile = fopen("$text", "r") or die("Unable to open file!");
    echo fread($myfile, filesize("$text"));
    fclose($myfile);

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

$data = "{$page}.csv";
$data2 = "{$page}2.csv";
$data3 = "{$page}3.csv";

希望我已经解释过自己以及我想要问的内容。

提前感谢大家阅读:)

1 个答案:

答案 0 :(得分:0)

您应该了解现代Web框架的工作原理。他们将view, the model and the controller分开。 模型是应用程序的逻辑体系结构,控制器是路由和呈现每个页面的代码,视图是所有html输出和造型。

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

分离控制器和模板

的index.php

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

<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