2013-05-06 3 views
0

У меня возникли проблемы сортировки текстовый файл и категоризации каждую строку по первой букве .. вот где я нахожусь ..Сортировка текстового файла в таблице в алфавитном порядке

list.txt

Apple 
Orange 
Apricot 
Banana 
Lemon 

categorize.php

<?php 
$fname = file("list.txt"); 
sort($fname); 
for($i=0; $i<count($fname); $i++) 
{ 
$states = explode(",", $fname[$i]); 
?><table> 
<th>A</th><th>B</th><th>L</th><th>O</th> 
<tr><td><?php echo [A],$states[0];?></td> 
<td><?php echo [B],$states[0];?></td> 
<td><?php echo [L],$states[0];?></td> 
<td><?php echo [O],$states[0];?></td></tr> 
</table> 
<?php 
} 
?> 

categorize.php выход

A B L O 
Apple Apple Apple Apple 
A B L O 
Apricot Apricot Apricot Apricot 
A B L O 
Banana Banana Banana Banana 
A B L O 
Lemon Lemon Lemon Lemon 
A B L O 
Orange Orange Orange Orange 

требуемый выход

A  B  L  O 
Apple Banana Lemon Orange 
Apricot 

Так что я понимаю, почему его в данный момент выводится двойной исходный текстовый файл, как я вторя его два раза, но я не могу понять, как я могу сказать это я только хочу строки, начинающиеся с а по а и в при B и т.д ..

+0

ждать, сейчас я даже не уверен, что таблицы правильно. hmm .. –

+0

да, таблица совершенно неправильная. –

+0

Вы должны сделать ' A B L O' – Aquillo

ответ

-1

Вы можете попробовать:

$fname = file("list.txt"); 
sort($fname); 

$category = array(); 
foreach($fname as $var) { 
    $category[strtoupper(substr($var, 0, 1))][] = $var; 
} 

printf("<table>"); 
printf("<th>"); 
foreach(array_keys($category) as $v) { 
    printf("<td>%s</td>", $v); 
} 
printf("</th>"); 

array_unshift($category, null); 

foreach(call_user_func_array("array_map", $category) as $v) { 
    printf("<tr>"); 
    foreach($v as $d) { 
     printf("<td>%s</td>", $d); 
    } 
    printf("</tr>"); 
} 
printf("</table>"); 

HTML OUTPUT

<table> 
    <th> 
    <td>A</td> 
    <td>B</td> 
    <td>L</td> 
    <td>O</td> 
    </th> 
    <tr> 
     <td>Apple</td> 
     <td>Banana</td> 
     <td>Lemon</td> 
     <td>Orange</td> 
    </tr> 
    <tr> 
     <td>Apricot</td> 
     <td></td> 
     <td></td> 
     <td></td> 
    </tr> 
</table> 
+0

Любая причина для downvote? – Baba

+0

Я не уверен, почему у вас есть голос, потому что он работает почти нормально. Это немного странно, но html кажется почти правильным. У меня будет игра и дам вам знать. Благодаря! –

+0

Что вы подразумеваете под ', кажется, почти работает'? Ну, ваш код был жестко закодирован, например, 'echo [A], $ states [0];' и это не мой стиль, я заставил систему автоматически определить положение и индекс – Baba

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