Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Pobranie pierwszego wiersza tabeli w razie braku nagłówka
Forum PHP.pl > Forum > Przedszkole
Kshyhoo
Mam taki kod odpowiedzialny za pobranie tagów tabeli i uzyskanie z niej tablicy. Wszystko działa, jeżeli tabela ma nagłówek, wysypuje się, jeżeli go nie ma.
  1. <?php
  2. $domS = new DOMDocument('1.0', 'UTF-8');
  3. $htmlContent = mb_convert_encoding($htmlContent, 'HTML-ENTITIES', 'UTF-8');
  4. $domS->loadHTML($htmlContent);
  5.  
  6. $DOM = new DOMDocument();
  7. $DOM->loadHTML($htmlContent);
  8.  
  9. $Header = $DOM->getElementsByTagName('th');
  10. $Detail = $DOM->getElementsByTagName('td');
  11.  
  12. if($Header) {
  13. foreach($Header as $NodeHeader) {
  14. $aDataTableHeaderHTML[] = trim($NodeHeader->textContent);
  15. }
  16. }
  17.  
  18. $r = 0;
  19. $d = 0;
  20. foreach($Detail as $sNodeDetail) {
  21. $aDataTableDetailHTML[$d][] = trim($sNodeDetail->textContent);
  22. $r = $r + 1;
  23. $d = $r % count($aDataTableHeaderHTML) == 0 ? $d + 1 : $d;
  24. }
  25.  
  26. for($r = 0; $r < count($aDataTableDetailHTML); $r++) {
  27. for($d = 0; $d < count($aDataTableHeaderHTML); $d++) {
  28. $aTempData[$r][$aDataTableHeaderHTML[$d]] = $aDataTableDetailHTML[$r][$d];
  29. }
  30. }
  31.  
  32. $array = array();
  33. $array = $aTempData;
  34. ?>

Jak najprościej, bez miliona IFów uniezależnić się od braku nagłówka? Mam pomysł, żeby pobrać pierwszy wiersz tabeli...
Tomplus
przede wszystkim

if($Header) powinno być if(is_array($Header))

Potem dla else stwórz tablicę $aDataTableHeaderHTML
(A tak, policz sobie ile jest TD i potem jeżeli $Header nie jest tablicą [zwraca null jak sądzę] to stwórz sobie tablicę $Header.)
Kshyhoo
Nie może być if(is_array($Header)), bo jeszcze nie jest tablicą a obiektem.
No i mógłbym właśnie tak obić jak piszesz, ale tam gdzie mam $aDataTableHeaderHTML musiałbym IFować, a może jakoś prościej to można...
nospor
Napisz moze slownie co ty chcesz osiagnac budujac te tablice, bo odnosze wrazenie ze zdziebko przekombinowales
Kshyhoo
Wklepuję (wklejam) tabelę do formularza i chcę z tego dostać tablicę (to mam). A potem robię z tego coś wink.gif
Tomplus
Jeżeli dobrze rozumiem to wysypuje ci się twoja tablica którą tworzysz, a nie odczytywanie tabeli jako obiektu.

Więc jeżeli $Header jest obiektem który jest pusty, to należałoby wykreować własny.

  1. $Header = $DOM->getElementsByTagName('th');
  2. $Detail = $DOM->getElementsByTagName('td');
  3. $Rows = $DOM->getElementsByTagName('tr');
  4.  
  5. if($Header->length > 0) { //Jeżeli ilość TH jest większa to wtedy skrypt działa ok.
  6. foreach($Header as $NodeHeader) {
  7. $aDataTableHeaderHTML[] = trim($NodeHeader->textContent);
  8. }
  9. } else { // Jeżeli mniejsza to
  10. for($i=0;$i<($Detail->length / $Rows->length);$i++) {
  11. // Jeżeli ilośćTD podzielimy przez ilość Rzędów to mamy ilość kolumn
  12. $aDataTableHeaderHTML[] = $i;
  13. }
  14. }
Kshyhoo
I o to właśnie mi chodziło. Udało mi się spłodzić to samemu, ale wyszło takie straszydło, że strach.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.