Vraag over foreach
Ben bezig met een scriptje met het scrapen van tekst:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
foreach($html->find('td[class=kc_cdcb]') as $e)
echo $e->innertext . '<br>';
foreach($html->find('td[class=kc_cdtitle]') as $e)
echo $e->innertext . '<br>';
foreach($html->find('td[class=kc_cdrt0]') as $e)
echo $e->innertext . '<br>';
echo $e->innertext . '<br>';
foreach($html->find('td[class=kc_cdtitle]') as $e)
echo $e->innertext . '<br>';
foreach($html->find('td[class=kc_cdrt0]') as $e)
echo $e->innertext . '<br>';
Het zijn 5 regels die hij scraped, maar nu gooit hij per 'categorie' de lijnen onder elkaar. Bijvoorbeeld:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
kc_cdcb
kc_cdcb
kc_cdcb
kc_cdcb
kc_cdcb
kc_cdtitle
kc_cdtitle
kc_cdtitle
kc_cdtitle
kc_cdtitle
kc_cdrt0
kc_cdrt0
kc_cdrt0
kc_cdrt0
kc_cdrt0
kc_cdcb
kc_cdcb
kc_cdcb
kc_cdcb
kc_cdtitle
kc_cdtitle
kc_cdtitle
kc_cdtitle
kc_cdtitle
kc_cdrt0
kc_cdrt0
kc_cdrt0
kc_cdrt0
kc_cdrt0
Is het mogelijk om de output te krijgen als:
Code (php)
1
2
3
4
5
2
3
4
5
kc_cdcb, kc_cdtitle, kc_cdrt0
kc_cdcb, kc_cdtitle, kc_cdrt0
kc_cdcb, kc_cdtitle, kc_cdrt0
kc_cdcb, kc_cdtitle, kc_cdrt0
kc_cdcb, kc_cdtitle, kc_cdrt0
kc_cdcb, kc_cdtitle, kc_cdrt0
kc_cdcb, kc_cdtitle, kc_cdrt0
kc_cdcb, kc_cdtitle, kc_cdrt0
kc_cdcb, kc_cdtitle, kc_cdrt0
Ik hoop dat iemand mij kan helpen.
Gewijzigd op 15/01/2017 13:06:12 door PHP er
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
[code]<?php
$a = array();
$b = array();
$c = array();
foreach($html->find('td[class=kc_cdcb]') as $e)
$a[] = $e->innertext;
foreach($html->find('td[class=kc_cdtitle]') as $e)
$b[] = $e->innertext;
foreach($html->find('td[class=kc_cdrt0]') as $e)
$c[] = $e->innertext;
foreach($a as $key => $value)
echo $value.','.$b[$key].','.$c[$key].'<br/>';
?>
[code]<?php
$a = array();
$b = array();
$c = array();
foreach($html->find('td[class=kc_cdcb]') as $e)
$a[] = $e->innertext;
foreach($html->find('td[class=kc_cdtitle]') as $e)
$b[] = $e->innertext;
foreach($html->find('td[class=kc_cdrt0]') as $e)
$c[] = $e->innertext;
foreach($a as $key => $value)
echo $value.','.$b[$key].','.$c[$key].'<br/>';
?>
Gewijzigd op 15/01/2017 13:35:18 door - SanThe -
- SanThe - op 15/01/2017 13:34:21:
Als elke groep uit altijd hetzelfde aantal bestaat:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
[code]<?php
$a = array();
$b = array();
$c = array();
foreach($html->find('td[class=kc_cdcb]') as $e)
$a[] = $e->innertext;
foreach($html->find('td[class=kc_cdtitle]') as $e)
$b[] = $e->innertext;
foreach($html->find('td[class=kc_cdrt0]') as $e)
$c[] = $e->innertext;
foreach($a as $key => $value)
echo $value.','.$b[$key].','.$c[$key].'<br/>';
?>
[/quote]
Yes, je hebt me erg geholpen! Thanks.
Nog een vraagje: hoe kan ik deze output nu verwerken in een mysql query, zodat ik deze in een table kan zetten?
[code]<?php
$a = array();
$b = array();
$c = array();
foreach($html->find('td[class=kc_cdcb]') as $e)
$a[] = $e->innertext;
foreach($html->find('td[class=kc_cdtitle]') as $e)
$b[] = $e->innertext;
foreach($html->find('td[class=kc_cdrt0]') as $e)
$c[] = $e->innertext;
foreach($a as $key => $value)
echo $value.','.$b[$key].','.$c[$key].'<br/>';
?>
[/quote]
Yes, je hebt me erg geholpen! Thanks.
Nog een vraagje: hoe kan ik deze output nu verwerken in een mysql query, zodat ik deze in een table kan zetten?
Afhankelijk van je database structuur.
- SanThe - op 15/01/2017 14:40:39:
Afhankelijk van je database structuur.
Ik heb de velden kc_cdcb, kc_cdtitle, kc_cdrt0 in m'n tabel 'info' staan
Dat kan dan toch gewoon met een "INSERT .... (..., .., ...) VALUES ('".$value."','".$b[$key]."','".$c[$key]."')".
Let wel op beveiliging.
- SanThe - op 15/01/2017 14:59:45:
En je wilt die gegevens er zo in zetten?
Dat kan dan toch gewoon met een "INSERT .... (..., .., ...) VALUES ('".$value."','".$b[$key]."','".$c[$key]."')".
Let wel op beveiliging.
Dat kan dan toch gewoon met een "INSERT .... (..., .., ...) VALUES ('".$value."','".$b[$key]."','".$c[$key]."')".
Let wel op beveiliging.
Ik heb het geprobeerd, maar op de 1 of andere manier zet hij alleen de 5e entry er in.. :O
echo $querystring;
- SanThe - op 15/01/2017 15:15:12:
echo $querystring;
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
$a = array();
$b = array();
$c = array();
foreach($html->find('td[class=kc_cdcb]') as $e)
$a[] = $e->innertext;
foreach($html->find('td[class=kc_cdtitle]') as $e)
$b[] = $e->innertext;
foreach($html->find('td[class=kc_cdrt0]') as $e)
$c[] = $e->innertext;
foreach($a as $key => $value)
$entry = 'INSERT INTO info (kc_cdcb, kc_cdtitle, kc_cdrt0) VALUES ("'.$value.'", "'.$b[$key].'", "'.$c[$key].'")';
mysql_query($entry);
$b = array();
$c = array();
foreach($html->find('td[class=kc_cdcb]') as $e)
$a[] = $e->innertext;
foreach($html->find('td[class=kc_cdtitle]') as $e)
$b[] = $e->innertext;
foreach($html->find('td[class=kc_cdrt0]') as $e)
$c[] = $e->innertext;
foreach($a as $key => $value)
$entry = 'INSERT INTO info (kc_cdcb, kc_cdtitle, kc_cdrt0) VALUES ("'.$value.'", "'.$b[$key].'", "'.$c[$key].'")';
mysql_query($entry);
Met deze lijn pakt die alleen regel5, ipv regel 1 t/m 4 er ook bij
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
foreach($a as $key => $value)
{
$entry = 'INSERT INTO info (kc_cdcb, kc_cdtitle, kc_cdrt0) VALUES ("'.$value.'", "'.$b[$key].'", "'.$c[$key].'")';
mysql_query($entry);
}
?>
foreach($a as $key => $value)
{
$entry = 'INSERT INTO info (kc_cdcb, kc_cdtitle, kc_cdrt0) VALUES ("'.$value.'", "'.$b[$key].'", "'.$c[$key].'")';
mysql_query($entry);
}
?>
Ik kan aanraden om MySQLi te gebruiken of PDO. Bij sterke voorkeur raad ik de Object Oriënted (OO) versie van MySQLi aan.
Accepteert die find() geen wildcard / patronen? Je rent nu namelijk 3x door de tekst heen, kan dat niet gereduceerd worden tot 1x? Van welke klasse is $html een object?