Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Tablica asocjacyjna z tabeli html
Forum PHP.pl > Forum > Przedszkole
php11
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
trueblue
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.
php11
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.  


trueblue
Wiem co chcesz osiągnąć i podałem Ci rozwiązanie.
php11
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.  
trueblue
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);
php11
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...
nospor
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. );
trueblue
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. }
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.