Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Pobranie pierwszego wiersza tabeli w razie braku nagłówka
Kshyhoo
post 10.04.2016, 20:14:17
Post #1





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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


--------------------
Go to the top of the page
+Quote Post
Tomplus
post 10.04.2016, 20:51:31
Post #2





Grupa: Zarejestrowani
Postów: 1 875
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


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.)

Ten post edytował Tomplus 10.04.2016, 20:51:41
Go to the top of the page
+Quote Post
Kshyhoo
post 10.04.2016, 20:56:18
Post #3





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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


--------------------
Go to the top of the page
+Quote Post
nospor
post 11.04.2016, 10:17:25
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Napisz moze slownie co ty chcesz osiagnac budujac te tablice, bo odnosze wrazenie ze zdziebko przekombinowales


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kshyhoo
post 11.04.2016, 19:14:33
Post #5





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Wklepuję (wklejam) tabelę do formularza i chcę z tego dostać tablicę (to mam). A potem robię z tego coś wink.gif


--------------------
Go to the top of the page
+Quote Post
Tomplus
post 11.04.2016, 21:34:35
Post #6





Grupa: Zarejestrowani
Postów: 1 875
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował Tomplus 11.04.2016, 21:35:18
Go to the top of the page
+Quote Post
Kshyhoo
post 11.04.2016, 21:45:24
Post #7





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 10.07.2025 - 07:16