2013-02-15 2 views
2

Извините, если это может быть простой вопрос, я раньше не работал с базами данных с плоским файлом и нашел это довольно неинтуитивным.Чтение и новая база данных с плоскими файлами с разделителями (многомерная)

У меня есть плоский файл, вкладка \t и \n новой строки с разделителями базы данных как таковой:

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

(две строки только для образца). Я хочу, чтобы иметь возможность итерации по каждой строке, инкапсулировать каждый элемент, разделенный символом табуляции \t внутри тега span, а затем перейти к следующей строке, предпочтительно инкапсулировать каждую новую строку в элементе <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>

т.д.

+0

[fget_csv] (http://www.php.net/manual/en/function.fgetcsv.php) не подходит для вас? – mkaatman

+0

Я предполагаю, что это похоже на то, что я сделал с помощью 'expode', мог бы сделать еще один цикл для решения второго измерения. – wnajar

ответ

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> 
+0

приятный, проще, чем я в конечном итоге выяснил – wnajar

Смежные вопросы