【问题标题】:Reading tab and newline delimited (multi-dimensional) flat-file database读取制表符和换行符分隔的(多维)平面文件数据库
【发布时间】:2013-01-31 23:25:52
【问题描述】:

抱歉,如果这可能是一个简单的问题,我之前没有使用过平面文件数据库,发现这非常不直观。

我有一个平面文件,制表符 \t\n 换行分隔数据库,如下所示:

Sebastian Ingrosso  Kidsos (Wippenberg Mix) 2F32829628  Electro
Avicii  Silhouettes 2F47987574 House

(两行仅用于示例)。我希望能够遍历每一行,将由\t 制表符分隔的每个元素封装在span 标记内,然后移至下一行,最好将每个新行封装在<li> 元素中。

我有这个开始,它不添加跨度或 li 的:

function display_tracklist($max) {
$db = fopen('db/db.txt', 'r');
$row = 0;
while (($tracks = fgetcsv($db, "\n")) !== FALSE) {
    if ($max > count($tracks)) {
        $max = count($tracks);
    }
    $row++;
    for ($index=0; $index < $max; $index++) {
        echo "<li>" . $tracks[$index] . "</li>";
    }
}
fclose($db);

}

处理此任务的最佳方法是什么?通常,我会使用 SQL 数据库来完成此操作,从而使事情变得更加直观,但这不是这里的选择。我想到了嵌套的 foreach 循环等,到目前为止还没有运气。

最终结果应该是: <li><span>Sebastian Ingrosso</span> <span>Kidsos (Wippenberg Mix)</span> <span>2F32829628</span> <span>Electro</span></li> <li><span>Avicii</span> <span>Silhouettes</span> <span>2F32829628</span> <span>House</span></li>

等等

【问题讨论】:

  • fget_csv 不适合你?
  • 我想这与我使用expode 所做的类似,可以做另一个循环来处理第二个维度。

标签: php database file flat-file


【解决方案1】:

假设你的数据和我的$data 一样,那看起来就像给了你想要的;

$data = "Sebastian\tIngrosso\tKidsos (Wippenberg Mix)\t2F32829628\tElectro\nAvicii\tSilhouettes\t2F47987574\tHouse";
foreach ((array) explode("\n", $data) as $lines) {
    print "<li>";
    foreach ((array) explode("\t", $lines) as $line) {
        print "<span>{$line}</span>";
    }
    print "</li>\n";
}

输出;

<li><span>Sebastian</span><span>Ingrosso</span><span>Kidsos (Wippenberg Mix)</span><span>2F32829628</span><span>Electro</span></li>
<li><span>Avicii</span><span>Silhouettes</span><span>2F47987574</span><span>House</span></li>

【讨论】:

  • 很好,比我最终弄清楚的方式简单
猜你喜欢
  • 1970-01-01
  • 2021-10-25
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 2020-11-21
  • 2023-03-31
相关资源
最近更新 更多