2012-08-13 65 views
0

下面是我的字符串,称为$ output,它来源于fsockopen和fread。唯一能够改变的是fread,但在此之前没有别的。PHP格式化字符串与MySQL数组结果类似

14336.0 K9IA 13-Aug-2012 1750Z washington, dc (throb) 
14336.0 K9IA 13-Aug-2012 1750Z fond du lac, wi (ssb) 
14336.0 K9IA 13-Aug-2012 1752Z calumet, wi (ssb) 
14336.0 K9IA 13-Aug-2012 1752Z carsen city, nv (ssb) 
14336.0 K9IA 13-Aug-2012 1753Z carson city, nv (ssb) 
14336.0 K9IA 13-Aug-2012 1754Z dane, wi (ssb) 
14336.0 K9IA 13-Aug-2012 1759Z dane, wi (cw) 
14336.0 KA2TED 13-Aug-2012 1759Z Carson City,NV(SSB) 
14336.0 K9IA 13-Aug-2012 1800Z dane, wi (psk) 
14336.0 K9IA 13-Aug-2012 1801Z bristol, va (psk) 
14336.0 K9IA 13-Aug-2012 1815Z caeson city, nv (rtty) 
14336.0 K9IA 13-Aug-2012 1816Z carson city, nv (rtty) 

我再取字符串$输出并执行以下操作:

$output = str_replace("\n", "<br>", $output); 

此右括号后插入一个换行),并形成12行。到目前为止完美。

我需要做的就是现在购买$输出,并能够以格式良好的表格显示它。

我的意思是......

每一个领域,作为一个数组....我想用相同的格式,如果它是一个MySQL数据为:

while($row = mysqli_fetch_array($result)) 
    echo $row['Freq']; 
    echo "</td><td>"; 
    echo $row['Call']; 
    echo "</td><td>"; 
    echo $row['Date']; 
    echo "</td><td>"; 
    echo $row['Time']; 
    echo "</td><td>"; 
    echo $row['CTYState']; 
    echo "</td><td>"; 
    echo $row['Mode']; 
    echo "</td><td>"; 

每个单独的理由是我需要执行其他功能,如链接等与给定字段。我搜索,尝试,沮丧,知道必须有一种方法。我一次又一次地在VB和PHP中使用MySQL或odbc_connect做了这个,但从来没有使用过一个字符串。

UPDATE ....

我使用的方法埃德Manot发布,因为我将能够使用的字段的链接,不同颜色等等........

,但.. ........

它并不真的很好。我只能看到前两个字段。我可以看到的字段只有字段1和字段3。使用您的原始代码,我只能看到1 14336.0,没有别的。有任何想法吗?

echo "<table border='1'>"; 
echo"<tr><th>FieldA</th><th>FiledB</th><th>FiledC</th><th>FieldD</th><th>FieldE</th> <th>FiledF</th><th>FiledG</th></tr>\n"; 
//split the output into lines based on the line break character 
$lines = explode("\n", $output); 
foreach($lines as $line) { 
//split the line into fields based on the space character 
$fields = explode(" ", $line); 
echo "<td>" .$fields[0]. "</td>"; 
echo "<td>" .$fields[1]. "</td>"; 
echo "<td>" .$fields[2]. "</td>"; 
echo "<td>" .$fields[3]. "</td>"; 
echo "<td>" .$fields[4]. "</td>"; 
echo "<td>" .$fields[5]. "</td>"; 
echo "<td>" .$fields[6]. "</td>"; 
echo "<td>" .$fields[7]. "</td>"; 

} 
echo '</table>'; 
+0

输入数据是可怕的格式。你确定这些字段不是制表符分隔的吗?这似乎是空格分隔的可能包含零个或多个空格的未加引号的字段,这只是愚蠢的。数据来自哪里? – DaveRandom 2012-08-13 19:20:54

+0

这些字段是空格分隔的未加引号的字段。在每一行的结尾是一个新行。数据来自使用fsockopen和fread的telnet会话。 – Blue68Camaro 2012-08-14 12:45:08

回答

0

我想出了问题。胡萝卜被用来代替空间。他们表现为空间,但没有。用正则表达式替换^为“”。现在工作。

0

您需要将数据分成数组:

//split the output into lines based on the line break character 
$lines = explode("\n", $output); 
foreach($lines as $line) { 
    //split the line into fields based on the space character 
    $fields = explode(" ", $line); 
    echo "<td>" . $fields[0] . "</td>"; 
    echo "<td>" . $fields[1] . "</td>"; 
    echo "<td>" . $fields[2] . "</td>"; 
    // etc... 
} 

http://php.net/manual/en/function.explode.php

+0

请不要告诉人们在'explode()'完成这个工作时会使用'split()',*尤其*。 join()可能是implode()的别名,但split()不是* explode()的别名,它是一个基于'ereg'的函数,将从PHP,希望很快。 – DaveRandom 2012-08-13 19:22:47

+0

我编辑了使用爆炸的答案。 – 2012-08-13 19:23:58

+0

我更新了我的帖子,请看上面..... – Blue68Camaro 2012-08-13 22:41:25

0

不要更换回车(如果真的存在?),做一些事情(脏),如:

$lines = explode("\n", $output); 
echo '<table>'; 
foreach($lines as $line) { 
    echo '<tr>'; 
    $parts = explode(" ", $line); 
    echo '<td>'.implode("</td><td>", $parts).'</td>'; 
    echo '</tr>'; 
} 
echo '</table>'; 

:D