Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Tablica asocjacyjna z tabeli html
php11
post 3.03.2020, 09:05:56
Post #1





Grupa: Zarejestrowani
Postów: 211
Pomógł: 5
Dołączył: 11.02.2011

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


Cześć,

mam tabele w html, która po usunięciu zbędnych rzeczy wygląda tak:

  1. <tr nazwisko="Adam Adamski" klub="" plec="Mężczyzna" miejsce="1" wynik="64.10">
  2. <tr nazwisko="Ewa Ewowska" klub="Nazwa Klubu" plec="Kobieta" miejsce="2" wynik="65.10">
  3. <tr nazwisko="Robert Robertowski" klub="" plec="Mężczyzna" miejsce="3" wynik="66.10">


Za pomocą explode tworzę tablicę, ale
  1. nazwisko="Adam Adamski" klub="" plec="Mężczyzna" miejsce="1" wynik="64.10"

cały czas pozostaje stringiem, a nie tablicą asocjacyjną...
Podmieniając znaki mogłem zrobić, że na ekranie wypisywało:

  1. array(nazwisko="Adam Adamski" klub="" plec="Mężczyzna" miejsce="1" wynik="64.10")


ale to cały czas jest sting, a nie tablica.


Naprowadzicie, co robię źle?
Dzięki
Go to the top of the page
+Quote Post
trueblue
post 3.03.2020, 09:31:57
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Wykorzystaj DOMDocument+DOMXPath wyszukując wszystkie wiersze tabeli.
Na każdym wierszy skorzystaj z właściwości https://www.php.net/manual/en/class.domnode...rops.attributes

Przykład:
https://www.php.net/manual/en/class.domname...demap.php#94346


P.S. A jeśli wiesz jakie atrybuty będą Cię interesować, to skorzystaj z getAttribute.

Ten post edytował trueblue 3.03.2020, 09:49:11


--------------------
Go to the top of the page
+Quote Post
php11
post 3.03.2020, 10:03:39
Post #3





Grupa: Zarejestrowani
Postów: 211
Pomógł: 5
Dołączył: 11.02.2011

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


Dzięki za szybka odpowiedź!

Pewnie nie zrozumiałem, co napisałeś :-)

Chcę osiągniąć taki efekt końcowy:

  1. array(2) {
  2. [0]=>
  3. array(5) {
  4. ["nazwisko"]=>
  5. string(5) "Adam Adamski"
  6. ["klub"]=>
  7. string(5) ""
  8. ["plec"]=>
  9. string(5) "Mężczyzna"
  10. ["miejsce"]=>
  11. string(5) "1"
  12. ["wynik"]=>
  13. string(5) "64.10"
  14.  
  15. array(5) {
  16.  
  17. itd...
  18.  
  19. }
  20.  
  21. }
  22.  


Go to the top of the page
+Quote Post
trueblue
post 3.03.2020, 10:10:31
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Wiem co chcesz osiągnąć i podałem Ci rozwiązanie.


--------------------
Go to the top of the page
+Quote Post
php11
post 3.03.2020, 10:59:37
Post #5





Grupa: Zarejestrowani
Postów: 211
Pomógł: 5
Dołączył: 11.02.2011

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


A, faktycznie, jestem bliżej, dzięki!


Ale: uciekło mi kodowanie, a var_dump wyświetla tylko jeden element, ale za to (wreszcie) array

  1. $html = $tabela;
  2.  
  3. $doc = new DOMDocument();
  4. $doc->loadHTML($html);
  5.  
  6. $tr = $doc->getElementsByTagName('tr')->item(0);
  7. $length = $tr->attributes->length;
  8.  
  9. $mozeWreszcie = array();
  10. for ($i = 0; $i < $length; ++$i) {
  11. $name = $tr->attributes->item($i)->name;
  12. $mozeWreszcie[] = $tr->getAttribute($name);
  13. }
  14. echo '<pre>'; var_dump($mozeWreszcie); echo '</pre>';
  15.  
Go to the top of the page
+Quote Post
trueblue
post 3.03.2020, 11:08:52
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Jeden element, bo może dlatego, że tylko jeden pobierasz, co?

  1. $html = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' . $html;
  2.  
  3. $doc = new DOMDocument();
  4. libxml_use_internal_errors(true);
  5. $doc->loadHTML($html);
  6. $doc->encoding = 'UTF-8';
  7. libxml_use_internal_errors(false);


Ten post edytował trueblue 3.03.2020, 11:09:56


--------------------
Go to the top of the page
+Quote Post
php11
post 3.03.2020, 12:10:03
Post #7





Grupa: Zarejestrowani
Postów: 211
Pomógł: 5
Dołączył: 11.02.2011

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


Dzieki!
Udało się!
Od wczoraj nad tym siedzę ;-)

  1. $html = $tabela;
  2. $html = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' . $html;
  3. $doc = new DOMDocument();
  4. libxml_use_internal_errors(true);
  5. $doc->loadHTML($html);
  6. $doc->encoding = 'UTF-8';
  7. libxml_use_internal_errors(false);
  8.  
  9. $tr = $doc->getElementsByTagName('tr');
  10.  
  11. $mozeWreszcie = array();
  12. foreach ($tr as $ttt) {
  13. $mozeWreszcie[] = array(
  14. $ttt->getAttribute("nazwisko"),
  15. $ttt->getAttribute("klub"),
  16. $ttt->getAttribute("plec"),
  17. );
  18. }
  19. echo '<pre>'; var_dump($mozeWreszcie); echo '</pre>';
  20.  
  21.  


Ach nie, jeszcze nazwy kluczy mi uciekły...

Ten post edytował php11 3.03.2020, 12:11:42
Go to the top of the page
+Quote Post
nospor
post 3.03.2020, 12:18:43
Post #8





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




Cytat
Ach nie, jeszcze nazwy kluczy mi uciekły...

$mozeWreszcie[] = array(
$ttt->getAttribute("nazwisko"),
$ttt->getAttribute("klub"),
$ttt->getAttribute("plec"),
);
nie budujesz ich, to ci "uciekly"
Same magicznie sie nie dodadza.

  1. $mozeWreszcie[] = array(
  2. 'nazwisko' => $ttt->getAttribute("nazwisko"),
  3. 'klub' => $ttt->getAttribute("klub"),
  4. 'plec' => $ttt->getAttribute("plec"),
  5. );


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

"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
trueblue
post 3.03.2020, 14:56:25
Post #9





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Gdybyś modyfikował kiedyś pulę pól:

  1. $fields = ['nazwisko', 'klub', 'plec'];
  2.  
  3. foreach ($trs as $index => $tr) {
  4. $length = $tr->attributes->length;
  5. for ($i = 0; $i < $length; $i++) {
  6. $attribute = $tr->attributes->item($i);
  7. if (in_array($attribute->name, $fields)) {
  8. $mozeWreszcie[$index][$attribute->name] = $attribute->value;
  9. }
  10. }
  11. }


lub:

  1. $fields = ['nazwisko', 'klub', 'plec'];
  2.  
  3. foreach ($trs as $index => $tr) {
  4. for ($i = 0; $i < count($fields); $i++) {
  5. $mozeWreszcie[$index][$fields[$i]] = $tr->getAttribute($fields[$i]);
  6. }
  7. }


--------------------
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: 27.04.2024 - 22:24