Hoi,
Ben bezig met een scriptje met het scrapen van tekst:
foreach($html->find('td[class=class1]') as $e)
echo $e->innertext . '<br>';
foreach($html->find('td[class=class2]') as $e)
echo $e->innertext . '<br>';
foreach($html->find('td[class=class3]') as $e)
echo $e->innertext . '<br>';
Het zijn 5 regels die hij scraped, maar nu weergeeft hij per 'categorie' de lijnen onder elkaar. Bijvoorbeeld:
class1
class1
class1
class1
class1
class2
class2
class2
class2
class2
class3
class3
class3
class3
class3
Is het mogelijk om de output te krijgen als:
class1, class2, class3
class1, class2, class3
class1, class2, class3
class1, class2, class3
class1, class2, class3
Ik hoop dat iemand mij kan helpen.
- Vraag over foreach
-
15-01-2017, 12:31 #1
- Berichten
- 325
- Lid sinds
- 11 Jaar
Vraag over foreach
-
15-01-2017, 12:38 #2Particulier
- Berichten
- 11
- Lid sinds
- 10 Jaar
Re: Vraag over foreach
Haal de <br> weg uit de echo regel, en vervang deze door een "," vervolgens een echo "<br>" commando tussen je foreach loops.
Dat zou de gewenste output moeten geven.
-
15-01-2017, 12:44 #3
- Berichten
- 1.267
- Lid sinds
- 15 Jaar
Re: Vraag over foreach
Zoiets? Dit script verwacht wel daadwerkelijk dat de classes met een cijfer eindigen (1 t/m 3)
PHP Code:<?php
$output = [];
for($i=1;$i<=3;$i++) {
foreach($html->find(sprintf('td[class=class%d]', $i)) as $e) $output[$i][] = $e->innertext;
}
for($i=1;$i<=3;$i++) {
echo implode(',', $output[$i]) . '<br />';
}
-
15-01-2017, 14:39 #4
- Berichten
- 1.395
- Lid sinds
- 18 Jaar
Re: Vraag over foreach
Het gaat om de <br /> tag op het einde.
Vervang die door een ,
-
15-01-2017, 15:03 #5Particulier
- Berichten
- 1.412
- Lid sinds
- 15 Jaar
Re: Vraag over foreach
Nee dat klopt niet. Ipv een enter krijg je dan gewoon alles aan elkaar:
Code:class1,class1,class1,class1,class1 class2,class2,class2,class2,class2 class3,class3,class3,class3,class3
Er zijn meerdere manieren om dit op te lossen. Een voorbeeld:
1. Als de classes in dezelfde row van de tabel zijn dan loop je door de <tr> en zoekt vervolgens de class1, class2, class3
2. Als dat niet het geval is doe je hetzelfde als dat je nu doet maar zet je ze eerst in een array. Je krijgt dan uiteindelijk:
arrClass1 = [class1,class1,class1,...]
arrClass2 = [class2,class2,class2,...]
arrClass3 = [class3,class3,class3,...]
Vervolgens loop je door één array maar neem je de anderen mee.
(pseude code)
Code:for(i=0;i<=arrClass1;i++){ str = arrClass1[i] +","+ arrClass2[i] + "," + arrClass3[i]; }
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic