ugrás a tartalomhoz

Stringműveletek PHP-ban

miqlas · 2008. Okt. 14. (K), 21.52
Helló!

Szeretném a segítségeteket kérni. Adott egy oldal ( ), amelyről szeretnék pár adatot, jelen esetben a folyamatjelzők százalékos értékeit átvenni az oldalamra. Találtam egy php forrást, amivel megoldható volna, de van vele egy kis gond, megtalálja az első keresett stringet, s ki is írja szépen, de a következőt már nem, ahelyett is az elsőt írja ki. Gondolom, valahol meg kellene mondani, hogy ne előről kezdje újra a keresést, hanem az utolsó találattól.

A kód:

<?
$handle = fopen("http://dev.haiku-os.org/roadmap", "rb");
$contents = stream_get_contents($handle);
fclose($handle);

$v=substr(strstr($contents, '<p class="percent">'),0);
echo substr($v,0,strpos($v,'</p>'));

$q=substr(strstr($contents, '<p class="percent">'),0);
echo substr($q,0,strpos($q,'</p>'));

?>
Sajnos én csak egy egyszerű gépész vagyok, de remélem, sikerült kiérteni a problémámat, s segíteni is tudtok.

Köszönettel:
miq
 
1

Összes találat

Poetro · 2008. Okt. 15. (Sze), 00.47
Bocsáss meg, hogy én nem a substr és strstr függvényekkel valósítom meg, de az tul sok valtozót kivánna, inkább egy vmivel olvashatóbb(?) változat:
<?php
$handle = fopen("http://dev.haiku-os.org/roadmap", "rb");
$contents = stream_get_contents($handle);
fclose($handle);
preg_match_all('/<p class="percent">.*?<\/p>/', $contents, $matches); // Keressük a bekezdéseket.
$percents = reset($matches); // Az összes nekünk kellő találat az első elemben van.
print implode("\n", $percents); // Kiírjuk a találatokat.
?>
2

reguláris kifejezések

gex · 2008. Okt. 15. (Sze), 02.10
a substr-es megoldás is jó lenne, a titka az, hogy a következő keresésnél már ne legyen benne az első találat. ezt vagy úgy tudod megtenni, hogy kivágod a string elejéről amit már megvizsgáltál vagy a keresésnél adod meg hogy honnan keresse. az strstr-nek nincs, de pl az strpos-nak már van offset paramétere.

Poetro-val teljesen egyetértek abban, hogy a reguláris kifejezések sokkal célravezetőbbek. az én megoldásom:

$html = file_get_contents('http://dev.haiku-os.org/roadmap');
if (preg_match_all('#<p class="percent">([0-9]+)%</p>#i', $html, $matches)) {
    var_dump($matches[1]);
}
else {
    echo 'no matches';
}
3

Köszönöm a segítségeteket, de

miqlas · 2008. Okt. 15. (Sze), 11.06
Köszönöm a segítségeteket, de nekem arra volna szükségem, hogy külön-külön ki tudjam iratni az eredményeket. Tehát valahogy hivatkoznom kellene az első, a második, és a többi eredményre. Megoldható ez valahogyan? Azt sikerült gex megoldásából kielemeznem, hogy egy tömbben tárolja az eredményeket, lehet ennek a tömbnek adot elemét kiiratni?

Köszönöm mindkettőtöknek mégegyszer!

Üdv!
miq
4

lehet

gex · 2008. Okt. 15. (Sze), 12.10

foreach ($array as $element) {
    echo $element;
}
kicsit bővebben.
5

Implode

Poetro · 2008. Okt. 15. (Sze), 12.41
Nem tudom, az implode-nál feltűnt-e, de az egy tömb elemeit kapcsolja össze valami stringgel, azaz a implode("\n", $percents);-ban levő $percents egy tömb, aminek egyes elemeit külön-külön is kirathatod.
6

Végül Poetro megoldása

miqlas · 2008. Okt. 15. (Sze), 13.18
Végül Poetro megoldása mellett döntöttem, de mint kiderült, nekem mégsincs szükségem a % jelre, csak magára az értékre.
Gondolom, valahol itt keresendő a megoldás:
preg_match_all('/<p class="percent">.*?<\/p>/', $contents, $matches);
De nem tudom, hogyan kellene átirni, hogy csak a számot kapjam meg, %-jel nélkül.

Még ennyit áruljatok el, legyetek szívesek.

Köszönettel:
miqlas
7

csak szám

gex · 2008. Okt. 15. (Sze), 13.38
én direkt kigyűjtöttem neked a számokat, ez volt a különbség Poetro megoldásához képest, ami a teljes p elemeket szedte össze neked. ha már vesszük a fáradságot, hogy megírjuk helyetted a programodat, akkor legalább megnézhetnéd, hogy mit csinálnak.
8

üdv

DsA · 2008. Okt. 16. (Cs), 13.21
üdv, bocsi, hogy nem bogarásztam végig az öszes hozzászólást, de a kérdésedből tul képpen az jön le, hogy neked az strrpos-ra lenne szükséged. remélem tudtam segíteni
Üdv
9

Siker!

miqlas · 2008. Okt. 17. (P), 23.58
Köszönöm szépen a segítségeteket, sikerült összebogarászni. A végeredményt megtekinthetitek itt . Még az IE kompatibilitással vannak gondok, de remélem, valahogy sikerül helyrepofoznom.

Üdv!