Skocz do zawartości

dane z txt do tabeli


itpawel

Rekomendowane odpowiedzi

Wymyśliłem sobie, że dane z pliku txt przerzucę do tabeli, gdzie dane będą ułożone w pionie wg kolumn

1.Dane z txt wczytałem do tablicy funkcją file(). $z=file(plik.txt);

[0]=> "a"

[1]=> "b"

[2]=>"c"

[3]=>"d"

2. Dodałem znaczniki <table> <tr> itd.

echo '<table>';
    foreach ($z as $a) {
if($a%2 != 0) {
echo '<td>'.$a .'</td>';
}
elseif($a%2 == 0) {
echo '<tr><td>'.$a.'</td>';
}}
echo '</table>';

 

W efekcie uzyskałem sortowanie danych w poziomie

<table><tr>

<td> a </td>  <td> b </td>   

</tr><tr>

<td> c< /td>  <td> d </td>

</tr></table>

 

a chciałbym w pionie (wg kolumn)

<table><tr>

<td> a </td>   <td> c </td>   

</tr><tr>

<td> b </td>  <td> d </td>

</tr></table>

 

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Nie da się tak jak proponujesz, bo foreach od razu drukuje elementy w kolejności w jakiej są w tablicy. W momencie, gdy dociera do drugiego elementu, wie, że ma go drukować w drugim rzędzie, ale nie ma pojęcia, że w kolejnej iteracji natrafi znowu na element, który ma być w rzędzie pierwszym. Ale ten został już zamknięty, gdy pojawił się kolejny znacznik <tr>.

Od razu uwagi:

  • Twój kod powoduje wydrukowanie błędnego htmla, tzn. bez podomykanych znaczników (przeglądarki sobie z tym poradzą bez problemu, ale jednak warto to robić poprawnie)
  • w pętli obliczasz resztę z dzielenia każdego z elementów tablicy $z przez 2, a nie ich indeksów (czyli 'a'%2, 'b'%2', itd. zamiast 0%2, 1%2, ...). By to zmienić potrzebujesz uzupełnić foreach o dodatkowe używanie indeksu dla każdego elementu, czyli: foreach ($z as $indeks => $a) {...} i to właśnie dla tego $indeks sprawdzasz resztę z dzielenia: if ($indeks$2 == 0)...
  • włącz wyświetlanie wszystkich błędów, ostrzeżeń i uwag w PHP, by wyłapać nawet najdrobniejsze pomyłki w kodzie. To powyższe zgłasza Warning: A non-numeric value encountered... co od razu sugeruje, że coś jest tam nie tak

Jak to obejść? Możesz stworzyć kolejną tablicę z popraną kolejnością i dopiero wówczas w pętli drukować prosto z niej, albo stworzyć zmienną, np.:

$z = ['a','b','c','d'];
$tr1 = [];
$tr2 = [];
foreach ($z as $k => $a) {
	$k%2 == 0 ? $tr1[] = $a : $tr2[] = $a;
}
$tr1 = implode('</td><td>', $tr1);
$tr2 = implode('</td><td>', $tr2);

echo '<table><tr>';
echo '<td>' . $tr1 . '</td>';
echo '</tr><tr>';
echo '<td>' . $tr2 . '</td>';
echo '</tr><table>';

 

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności