Vraag over foreach
Hoi,
Ben bezig met een scriptje met het scrapen van tekst:
Het zijn 5 regels die hij scraped, maar nu gooit hij per 'categorie' de lijnen onder elkaar. Bijvoorbeeld:
Is het mogelijk om de output te krijgen als:
Ik hoop dat iemand mij kan helpen.
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
Als elke groep uit altijd hetzelfde aantal bestaat:
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
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.
- 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
Als je meer dan 1 regel achter een for(each),while() enz. wilt laten uitvoeren moet je { en } gebruiken.
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);
}
?>
En verder zijn de gebruikte mysql-functies niet meer aan te raden omdat deze in PHP7 geschrapt zijn.
Ik kan aanraden om MySQLi te gebruiken of PDO. Bij sterke voorkeur raad ik de Object Oriënted (OO) versie van MySQLi aan.
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?




