Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]odczytanie ilosci znacznikow HTML z wykorzystaniem Simple HTML DOM Parser
Forum PHP.pl > Forum > Przedszkole
uki8877
Witam

Chcialbym obliczyc ilosc znacznikow option w danym select

teraz robie to tak;

  1. $optionsSum = 0;
  2.  
  3. foreach($html->find('select[id=select1] option') as $select) {
  4. if(preg_match_all('|<option.*?>(.+?)</option>|is', $select, $select, PREG_SET_ORDER)) {
  5. $optionsSum++;
  6. }
  7. }
  8.  
  9. echo $optionsSum;


I to działa poprawnie.

Jednak chciałbym dowiedzieć się czy istnieje lepszy, bardziej profesjonalny sposob ?

Pozdrawiam
KsaR
  1. <?php
  2. $str = '<select>
  3. <option value="1">1</option>
  4. <option value="2">2</option>
  5. <option value="3">3</option>
  6. <option value="4">4</option>
  7. </select>';
  8.  
  9. $dom = new DOMDocument;
  10. $dom->loadHTML($str);
  11. echo $dom->getElementsByTagName('option')->length;

Tak działa, jednak nie wiem jak dorobić po id tongue.gif musisz pogooglowac.
uki8877
dzieki za odpowiedz, Twoj przyklad dziala tylko ze ja pobieram dane cURL'em wiec zamienilem loadHTML na load i pojawil sie problem, poniewaz wyswietla 0 ,chociaz powinno 5

moj kod :

  1. $dom = new DOMDocument;
  2. $dom->load($html);
  3. echo $dom->getElementsByTagName('option')->length;
trueblue
Czyli masz źródło w postaci stringu, tak?
Powinieneś zrobić tak jak podał KsaR.
uki8877
gdy zrobie tak jak podal Ksar to otrzymuje
"DOMDocument::loadHTML(): ID submitSearch already defined in Entity"
trueblue
Ok, rozumiem dlaczego.
A loadXML?
uki8877
Też próbowałem, wyrzuca podobny błąd co przy loadHTML. Jedynie samo load() nie wyrzuca błędów, jednak wyświetla 0, chociaż w zmiennej jest kod który posiada kilka OPTION
CuteOne
Hmm, to jest ten porąbany walidator :| dodaj libxml_use_internal_errors() http://php.net/manual/en/function.libxml-u...rnal-errors.php + loadXML()
KsaR
  1. <?php
  2. $str = '<select id="select1">
  3. <option value="1">1</option>
  4. <option value="2">2</option>
  5. <option value="3">3</option>
  6. <option value="4">4</option>
  7. </select>'; // twój html
  8. preg_match("#<select id=\"select1\">(?<options>(.|\s)*)</select>#", $str, $output); // wyłapanie opcji w select id="select1".
  9. echo substr_count($output['options'], '<option'); // zliczenie wystąpień option w tym select.
  10. unset($output); // skasowanie wylapanej tablicy.

Hm. A tak?
Co prawda ten pattern' nie jest najlepszy ale cały kod działa jak trzeba, w dodatku wyłapuje po id. tongue.gif
uki8877
Dzieki wielkie wszystkim za pomoc ,zastosowanie funkcji podanej przez CuteOne pomogło. Poniżej przedstawiam pełny kod :

  1. libxml_use_internal_errors(true);
  2. $dom = new DOMDocument;
  3. $dom->loadHTML($html); // zmienna $html przechowuje kod HTML strony pobranej przy pomocy cURL
  4. echo $dom->getElementsByTagName('option')->length;
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.