2012-08-13 59 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