webForumDet fria alternativet

Sortera i två kolumner från textfil

PHP

7 svar · 523 visningar · startad av norra54

Medlem sedan sep. 2003110 inlägg
Frågan#1

Hejsan

Skulle vilja att de namn som jag sparat i en kolumn i en textfil skrivs ut i två kolumner på sidan i alfabetisk ordning oavsett hur de står i textfilen.

Idag använder jag koden nedan så kanske ni förstår frågan bättre. Här måste jag dock själv se till att namnen hamnar i rätt ordning vilket är lite jobbigt när nya namn ska skrivas in - betydligt enklare vore ju att kunna skriva in dem var som helst.

<?
	$filename = "marke.txt";
	$fd = fopen($filename, 'r');
	
	echo '<table border="0" cellspacing="0" cellpadding="1">';
	while(!feof($fd))
	{
		$line = explode("|", fgets($fd));
		if(sizeof($line) == 2)                    //ändra efterhand
		{
			echo "<tr><td width='15' align='center' valign='top'><img src='grafik/punkt.gif' width='7' height='13'></td>
<td width='150'><b>$line[0]</b></td>
<td width='15' align='center' valign='top'><img src='grafik/punkt.gif' width='7' height='13'></td>
<td><b>$line[1]</b></td></tr>\n";
		}
	}
	echo '</table>';
	fclose($fd);
?>

Nuvarande textfils utseende:

Audi|Mercedes
BMW|Saab
Ford|Volvo

som jag alltså vill ha i en enda lång lista, typ

Audi
BMW
Ford
osv

Någon lösning på hur detta skulle kunna lösas mottages tacksamt.

mvh

Medlem sedan aug. 20002 975 inlägg
#2

Spara ner i en array, och sortera sedan arrayen.
Därefter skriver du ut från arrayen.

Medlem sedan sep. 2003110 inlägg
#3

Ok, men..

för en total newbie - hur skulle en sådan liten nätt kod se ut?

mvh

Medlem sedan aug. 20002 975 inlägg
#4

Det skulle kunna gå att göra så här:

$files = array();

$content = file('marke.txt');

for ($i=0; $i<sizeof($content); $i++) {
   $line = explode("|", trim($content[$i]));
   foreach($line as $val) {
      if (!empty($val)) {
         $files[] = $val;
      }
   }
}

Eller så här:

$content = file_get_contents('marke.txt');
$files = preg_split("/(\r\n|\r|\n|\\|)/", trim($content));

Samt ett antal ytterligare varianter.

Sedan sorterar du med:

sort($files);

[EDIT]
Glömde att forumet kräver dubbla backslash.

Medlem sedan sep. 2003110 inlägg
#5

Ok,
säg att jag väljer att använda mig av ditt översta exempel - vad echo:ar jag..? Får det inte att fungera.

mvh

Medlem sedan okt. 20023 030 inlägg
#6

Efter det andra:

foreach ($files as $row) {
    echo $row . "<br/>";
}
Medlem sedan aug. 20002 975 inlägg
#7

Och vill du ha det i två kolumner kan du göra så här:

if (!empty($files)) {

   echo "<table>\n";

   $file = reset($files);

   do {

     if (($file2 = next($files)) === false) {
        $file2 = '&nbsp;';
     }

     echo "
       <tr>
       <td>$file</td>
       <td>$file2</td>
       </tr>
     ";

   } while($file = next($files));

   echo "\n</table>\n";

}
Medlem sedan sep. 2003110 inlägg
#8

Tackar, båda

mvh

251 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
120 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)