0

我在对文本文件进行排序并按第一个字母对每一行进行分类时遇到问题。这就是我所在的位置。

列表.txt

Apple
Orange
Apricot
Banana
Lemon

分类.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
}
?>

分类.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

所以我明白为什么它当前输出两倍的原始文本文件,因为我重复了两次,但我不知道我怎么能告诉它我只想要以 A 下的 A 和 B 下的 B 等开头的行。

4

1 回答 1

-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 输出

<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>
于 2013-05-06T13:31:25.420 回答