1

我正在开发一种工具来将一些数据从数据库导出到文本文件。代码如下:

    $query3=mysql_query("SELECT * FROM records WHERE domain_id=".$domainID." AND type='NS' ORDER BY id ASC, name ASC");
    while($result3 = mysql_fetch_array($query3))
    {
        $type=$result3['type'];
        $content=$result3['content'];
        $result = $result3['name'];
        $length = strlen(".".$domainNAME);
        $string = substr($result, 0, $length*(-1));
        fwrite($fh,$string."                    IN NS ".$content."\n");

    }

所以输出文本文件之一是这样的:

                             IN NS ns1.example.net.

 team.example.net.                  IN NS ns1.example.net.

 team.example.net.                  IN NS ns2.example.net.

 teamex01.example.net.                  IN NS ns1.example.net.

 teamex01.example.net.                  IN NS ns2.example.net.

 dev.example.net.                   IN NS ns1.example.net.

 dev.example.net.                   IN NS ns2.example.net.

我想像这样输出文件:

                                    IN NS ns1.example.net.

 team.example.net.                  IN NS ns1.example.net.

 team.example.net.                  IN NS ns2.example.net.

 teamex01.example.net.              IN NS ns1.example.net.

 teamex01.example.net.              IN NS ns2.example.net.

 dev.example.net.                   IN NS ns1.example.net.

 dev.example.net.                   IN NS ns2.example.net.

我想按列排列。IN NS 记录应排列在一列中。有没有办法整理文件?

谢谢!

4

2 回答 2

1

为此,您需要预先遍历整个列表以获取第一列中文本的最长字符串长度,strlen()然后str_pad()在输出时使用它以使其“漂亮”。

尝试这样的事情(粗略的概念):

$results = array();
$longestLength = 0;
// loop through the mysql results, store them in a `results`-array and save the longest-name
while($result = mysql_fetch_array($query)) {
    $results[] = $result;
    if (($strlen = strlen($result['name'])) > $longestLength) $longestLength = $strlen;
}

// loop through all of the results and output with the desired format
foreach ($results as $result) {
    echo sprintf("%s\tIN NS %s\n", str_pad($result['name'], $longestLength), $result['content']);
}

旁注(不具体回答):
建议不要mysql在 PHP 中使用旧的、已弃用的扩展,而是使用喜欢的mysqliPDO扩展。两者都提供了额外的功能,例如准备好的语句,并且对 SQL 注入攻击也更加安全!

于 2013-06-06T00:36:35.973 回答
0

用于:str_pad()_$string

$string = str_pad(substr($result, 0, $length*(-1)), 6, ' ', STR_PAD_RIGHT);

这将在该字符串的末尾添加最多六个空格,以确保它是统一的长度。

6根据您上面提供的示例,这是任意的。您需要查看哪个值最适合您。)

于 2013-06-06T00:35:13.967 回答