Multidimensionele array uitlezen (Opgelost)
Martnt - 05/09/2011 12:12
Nieuw lid
Hoi allemaal,
Ik ben nu al weet ik het hoe lang aan het kloten om een multidimensionele array uit te lezen. Ik denk dat ik gewoon veel te lang geen php meer heb gedaan... Kan iemand me hiermee helpen? Ik heb allerlei tutorials op het internet gelezen etc maar kom er niet uit... Het gaat om deze array:
Array
(
[0] => Array
(
[dag] => Maandag 05-september-2011
[0] => Array
(
[lestijd] => 13:30 - 15:00
[vak] => Diagnostisch onderzoek 2a: theorie
[lokaal] => C189
[docent] => G. Roemer
)
)
[1] => Array
(
[dag] => Dinsdag 06-september-2011
[0] => Array
(
[lestijd] => 08:30 - 10:00
[vak] => Leer- en gedragsproblemen 1
[lokaal] => C061
[docent] => G.M.E. Verweij
)
[1] => Array
(
[lestijd] => 10:30 - 12:00
[vak] => Coaching, counseling en training 2a
[lokaal] => B323
[docent] => A. de Koning
)
[2] => Array
(
[lestijd] => 13:30 - 15:00
[vak] => SLB / Internationalisering
[lokaal] => A349
[docent] => M.J.E. van der Klis
)
[3] => Array
(
[lestijd] => 15:15 - 16:45
[vak] => Leer- en gedragsproblemen 1
[lokaal] => A153
[docent] => W.E.H. Boon-Wensenk
)
)
[2] => Array
(
[dag] => Woensdag 07-september-2011
[0] => Array
(
[lestijd] => 15:15 - 16:45
[vak] => Toegepast onderzoek 2a: observeren en experimenteren
[lokaal] => C189
[docent] => M.A. Farfan Galindo
)
)
[3] => Array
(
[dag] => Vrijdag 09-september-2011
[0] => Array
(
[lestijd] => 08:30 - 12:00
[vak] => Toegepast onderzoek 2a: observeren en experimenteren
[lokaal] => A153
[docent] => M.A. Farfan Galindo
)
[1] => Array
(
[lestijd] => 13:30 - 16:00
[vak] => Diagnostisch onderzoek 2a: intelligentie
[lokaal] => B430
[docent] => M.J.E. van der Klis
)
)
)
(
(
[ dag] => Maandag 05 - september- 2011
(
[ lestijd] => 13 : 30 - 15 : 00
[ vak] => Diagnostisch onderzoek 2a: theorie
[ lokaal] => C189
[ docent] => G. Roemer
)
)
(
[ dag] => Dinsdag 06 - september- 2011
(
[ lestijd] => 08 : 30 - 10 : 00
[ vak] => Leer- en gedragsproblemen 1
[ lokaal] => C061
[ docent] => G. M. E. Verweij
)
(
[ lestijd] => 10 : 30 - 12 : 00
[ vak] => Coaching, counseling en training 2a
[ lokaal] => B323
[ docent] => A. de Koning
)
(
[ lestijd] => 13 : 30 - 15 : 00
[ vak] => SLB / Internationalisering
[ lokaal] => A349
[ docent] => M. J. E. van der Klis
)
(
[ lestijd] => 15 : 15 - 16 : 45
[ vak] => Leer- en gedragsproblemen 1
[ lokaal] => A153
[ docent] => W. E. H. Boon- Wensenk
)
)
(
[ dag] => Woensdag 07 - september- 2011
(
[ lestijd] => 15 : 15 - 16 : 45
[ vak] => Toegepast onderzoek 2a: observeren en experimenteren
[ lokaal] => C189
[ docent] => M. A. Farfan Galindo
)
)
(
[ dag] => Vrijdag 09 - september- 2011
(
[ lestijd] => 08 : 30 - 12 : 00
[ vak] => Toegepast onderzoek 2a: observeren en experimenteren
[ lokaal] => A153
[ docent] => M. A. Farfan Galindo
)
(
[ lestijd] => 13 : 30 - 16 : 00
[ vak] => Diagnostisch onderzoek 2a: intelligentie
[ lokaal] => B430
[ docent] => M. J. E. van der Klis
)
)
)
Alvast hartelijk bedankt voor je hulp!!!
Dankje,
Martnt
11 antwoorden
Gesponsorde links
vinTage - 05/09/2011 12:26
Nieuw lid
Heb je de code hoe het array wordt opgebouwd?
Je moet iig met een foreach door je array loopen en daarna nog een keer.
Maar eea is makkelijker als we wat namen etc hebben.
Dlol - 05/09/2011 12:41 (laatste wijziging 05/09/2011 12:41)
Lid
// Eerst de volledige array aflopen
foreach ($volledigeArray as $subArray) {
// Nu alle subarrays aflopen
foreach ($subArray as $key => $value) {
// Kijk nu of het de dag betreft
if ($key != "dag") {
// Loop alle overige arrays af
foreach ($value as $key2 => $value2) {
// Hier zit je nu op het niveau van lestijd, vak docent etc.
echo $key2 . ": " . $value2[$key2];
}
}
}
}
// Eerst de volledige array aflopen
foreach ( $volledigeArray as $subArray ) {
// Nu alle subarrays aflopen
foreach ( $subArray as $key => $value ) {
// Kijk nu of het de dag betreft
if ( $key != "dag" ) {
// Loop alle overige arrays af
foreach ( $value as $key2 => $value2 ) {
// Hier zit je nu op het niveau van lestijd, vak docent etc.
echo $key2 . ": " . $value2 [ $key2 ] ;
}
}
}
}
Bedankt door: Martnt
Martnt - 05/09/2011 12:54
Nieuw lid
Bedankt Dlol maar het werkt helaas niet... Dit is de code die ik gebruik om alles in de array te zetten:
<?php
include_once ( 'simple_html_dom.php' );
$html = file_get_html ( 'http://roosters.saxion.nl/index.php?klas=DTP2VE&intraprof=AMA+TP+vt+D&lang=NL&weekoffset=&printversie' );
$html = preg_replace ( '/<tr class="tabeltitel">/', '</div></table><div class="lesdagen"><table class="lesinhoud"><tr class="tabeltitel">', $html );
$html = str_replace ( ' ', ' ', $html );
$html = str_get_html ( $html );
$i_Dag = 0;
foreach ( $html->find('div.lesdagen') as $lessen )
{
foreach ( $lessen->find('table.lesinhoud') as $inhoud)
{
$a_Dag[$i_Dag]['dag'] = $inhoud->find('td.celtitel',0)->plaintext; $i =0;
while($inhoud->find('td.celtijd', $i) == true)
{
$a_Dag[$i_Dag][] = array(
'lestijd' => @$inhoud->find('td.celtijd',$i)->plaintext,
'vak' => @$inhoud->find('div.floatLeft', $i)->plaintext,
'lokaal' => @$inhoud->find('td.cellokaal', $i)->plaintext,
'docent' => @$inhoud->find('td.celdocent', $i)->plaintext
);
$i++;
}
$i_Dag ++;
}
}
//echo '<pre>' . print_r ( $a_Dag,1 ) . '</pre>';
?>
<?php
include_once ( 'simple_html_dom.php' ) ;
$html = file_get_html ( 'http://roosters.saxion.nl/index.php?klas=DTP2VE&intraprof=AMA+TP+vt+D&lang=NL&weekoffset=&printversie' ) ;
$html = preg_replace ( '/<tr class="tabeltitel">/' , '</div></table><div class="lesdagen"><table class="lesinhoud"><tr class="tabeltitel">' , $html ) ; $html = str_get_html ( $html ) ;
$i_Dag = 0 ;
foreach ( $html -> find ( 'div.lesdagen' ) as $lessen )
{
foreach ( $lessen -> find ( 'table.lesinhoud' ) as $inhoud )
{
$a_Dag [ $i_Dag ] [ 'dag' ] = $inhoud -> find ( 'td.celtitel' , 0 ) -> plaintext ; $i = 0 ;
while ( $inhoud -> find ( 'td.celtijd' , $i ) == true )
{
$a_Dag [ $i_Dag ] [ ] = array ( 'lestijd' => @ $inhoud -> find ( 'td.celtijd' , $i ) -> plaintext ,
'vak' => @ $inhoud -> find ( 'div.floatLeft' , $i ) -> plaintext ,
'lokaal' => @ $inhoud -> find ( 'td.cellokaal' , $i ) -> plaintext ,
'docent' => @ $inhoud -> find ( 'td.celdocent' , $i ) -> plaintext
) ;
$i ++;
}
$i_Dag ++;
}
}
//echo '<pre>' . print_r ( $a_Dag,1 ) . '</pre>';
?>
Wat ik graag zou willen is dat alle values worden gedefinieerd zodat ik alles mooi kan verpakken in een css layout... Ik kan zo ook even niet zien wat er fout is bij jouw stukje code, iemand anders?
Dlol - 05/09/2011 13:18
Lid
Je hebt $volledigeArray toch vervangen door $a_Dag neem ik aan?
Ik snap ook niet goed wat je bedoeld met "de values definiëren zodat ik alles kan verpakken in een css layout". Wat bedoel je daarmee?
Martnt - 05/09/2011 13:20
Nieuw lid
Ja dat heb ik inderdaad veranderd, wat ik dan krijg is slechts de eerste letters van de values. Dus van maandag-5-september-2011 krijg ik alleen M te zien... Wat ik bedoel is dat ik de array wil kunnen aanroepen als $subaray['lestijd'] etc etc. dan kan ik die values makkelijk in mijn layout verwerken.
Dlol - 05/09/2011 13:29
Lid
Excuses, ik zat even in javascript te denken. Het moet zijn:
echo $key2 . ": " . $value2;
echo $key2 . ": " . $value2 ;
ipv
echo $key2 . ": " . $value2[$key2];
echo $key2 . ": " . $value2 [ $key2 ] ;
Bedankt door: Martnt
Martnt - 05/09/2011 14:02 (laatste wijziging 05/09/2011 14:06)
Nieuw lid
Okay dankje! Stom dat ik dat trouwens zelf niet heb gezien maar ik snap hoe je het hebt gedaan...
Maar nu heb ik nog een vraagje, hoe zou je bijvoorbeeld alleen alle dagen uit de hele aray halen? Hoe moet dat? Dankje!
EDIT: Ik zie nu trouwens dat met jouw manier hij maar de helft uit de aray haalt. Hij slaat telkens het eerste resultaat na de dag over...
WouterJ - 05/09/2011 14:16
HTML gevorderde
Alleen de dagen uitlezen:
foreach( $jouwArray as $multiArray )
{
# $multiArray bevat nu elke waarde van $jouwArray[0], $jouwArray[1], enz.
# Als je we nu $multiArray['dag'] doe vragen we eigenlijk $jouwArray[0]['dag'] op,
# precies wat we willen!
echo 'De datum: '.$multiArray['dag']."<br />\n";
}
foreach ( $jouwArray as $multiArray )
{
# $multiArray bevat nu elke waarde van $jouwArray[0], $jouwArray[1], enz.
# Als je we nu $multiArray['dag'] doe vragen we eigenlijk $jouwArray[0]['dag'] op,
# precies wat we willen!
echo 'De datum: ' . $multiArray [ 'dag' ] . "<br />\n " ; }
Bedankt door: Martnt
Martnt - 05/09/2011 14:28 (laatste wijziging 05/09/2011 14:35)
Nieuw lid
Dankje, dat komt in de buurt van wat ik precies zoek Wat ik heb gedaan is beide codes samengevoegd tot wat ik precies zoek en dan hou ik dit over:
foreach( $a_Dag as $multiArray )
{
# $multiArray bevat nu elke waarde van $jouwArray[0], $jouwArray[1], enz.
# Als je we nu $multiArray['dag'] doe vragen we eigenlijk $jouwArray[0]['dag'] op,
# precies wat we willen!
echo $multiArray['dag'] . '<br />';
foreach ( $multiArray as $key => $lesrooster )
{
if ( $key != 'dag' )
{
echo $lesrooster['lestijd'] . '<br />';
}
}
}
foreach ( $a_Dag as $multiArray )
{
# $multiArray bevat nu elke waarde van $jouwArray[0], $jouwArray[1], enz.
# Als je we nu $multiArray['dag'] doe vragen we eigenlijk $jouwArray[0]['dag'] op,
# precies wat we willen!
echo $multiArray [ 'dag' ] . '<br />' ;
foreach ( $multiArray as $key => $lesrooster )
{
if ( $key != 'dag' )
{
echo $lesrooster [ 'lestijd' ] . '<br />' ; }
}
}
Het enige probleem wat hij dan geeft is dat hij dit output:
Maandag 05-september-2011
Dinsdag 06-september-2011
10:30 - 12:00
13:30 - 15:00
15:15 - 16:45
Woensdag 07-september-2011
Vrijdag 09-september-2011
13:30 - 16:00
Maandag 05 - september- 2011
Dinsdag 06 - september- 2011
10 : 30 - 12 : 00
13 : 30 - 15 : 00
15 : 15 - 16 : 45
Woensdag 07 - september- 2011
Vrijdag 09 - september- 2011
13 : 30 - 16 : 00
Hij mist steeds de '0' waarde van de array... Dus hij mist steeds de eerste lestijden van de array. Hoe is dit op te lossen? Zonder dat hij weer de dag terug geeft?
EDIT: Deze slaat hij dus steeds over:
[0] => Array
(
[lestijd] => 13:30 - 15:00
[vak] => Diagnostisch onderzoek 2a: theorie
[lokaal] => C189
[docent] => G. Roemer
)
(
[ lestijd] => 13 : 30 - 15 : 00
[ vak] => Diagnostisch onderzoek 2a: theorie
[ lokaal] => C189
[ docent] => G. Roemer
)
WouterJ - 05/09/2011 14:48
HTML gevorderde
Met deze code zou je het moeten lukken:
foreach( $jouwArray as $multiArray )
{
foreach( $multiArray as $key => $lesrooster )
{
if( $key == 'dag' )
{
echo $lesrooster."<br />\n";
}
else
{
echo $lesrooster['lestijd']."<br />\n";
}
}
}
foreach ( $jouwArray as $multiArray )
{
foreach ( $multiArray as $key => $lesrooster )
{
if ( $key == 'dag' )
{
echo $lesrooster . "<br />\n " ; }
else
{
echo $lesrooster [ 'lestijd' ] . "<br />\n " ; }
}
}
Martnt - 05/09/2011 15:51 (laatste wijziging 06/09/2011 09:35)
Nieuw lid
EDIT:
Ik heb het inmiddels zo opgelost en het werkt nu perfect
<?php
include_once ( 'simple_html_dom.php' );
$html = file_get_html ( 'http://roosters.saxion.nl/index.php?klas=DTP2VE&intraprof=AMA+TP+vt+D&lang=NL&weekoffset=&printversie' );
$html = preg_replace ( '/<tr class="tabeltitel">/', '</div></table><div class="lesdagen"><table class="lesinhoud"><tr class="tabeltitel">', $html );
$html = str_replace ( ' ', ' ', $html );
$html = str_get_html ( $html );
$i_Dag = 0;
foreach ( $html->find('div.lesdagen') as $lessen )
{
foreach ( $lessen->find('table.lesinhoud') as $inhoud)
{
$a_Dag[$i_Dag][] = $inhoud->find('td.celtitel',0)->plaintext; $i = 0;
while ( $inhoud->find('td.celtijd', $i) == true )
{
$a_Dag[$i_Dag][] = array(
'lestijd' => @$inhoud->find('td.celtijd',$i)->plaintext,
'vak' => @$inhoud->find('div.floatLeft', $i)->plaintext,
'lokaal' => @$inhoud->find('td.cellokaal', $i)->plaintext,
'docent' => @$inhoud->find('td.celdocent', $i)->plaintext
);
$i++;
}
$i_Dag ++;
}
}
foreach( $a_Dag as $multiArray )
{
foreach( $multiArray as $key => $lesrooster )
{
if( $key == 0 )
{
echo '<b>' . $lesrooster . '</b><br />';
}
else
{
echo $lesrooster['lestijd'] . '<br />';
}
}
}
?>
<?php
include_once ( 'simple_html_dom.php' ) ;
$html = file_get_html ( 'http://roosters.saxion.nl/index.php?klas=DTP2VE&intraprof=AMA+TP+vt+D&lang=NL&weekoffset=&printversie' ) ;
$html = preg_replace ( '/<tr class="tabeltitel">/' , '</div></table><div class="lesdagen"><table class="lesinhoud"><tr class="tabeltitel">' , $html ) ; $html = str_get_html ( $html ) ;
$i_Dag = 0 ;
foreach ( $html -> find ( 'div.lesdagen' ) as $lessen )
{
foreach ( $lessen -> find ( 'table.lesinhoud' ) as $inhoud )
{
$a_Dag [ $i_Dag ] [ ] = $inhoud -> find ( 'td.celtitel' , 0 ) -> plaintext ; $i = 0 ;
while ( $inhoud -> find ( 'td.celtijd' , $i ) == true )
{
$a_Dag [ $i_Dag ] [ ] = array ( 'lestijd' => @ $inhoud -> find ( 'td.celtijd' , $i ) -> plaintext ,
'vak' => @ $inhoud -> find ( 'div.floatLeft' , $i ) -> plaintext ,
'lokaal' => @ $inhoud -> find ( 'td.cellokaal' , $i ) -> plaintext ,
'docent' => @ $inhoud -> find ( 'td.celdocent' , $i ) -> plaintext
) ;
$i ++;
}
$i_Dag ++;
}
}
foreach ( $a_Dag as $multiArray )
{
foreach ( $multiArray as $key => $lesrooster )
{
if ( $key == 0 )
{
echo '<b>' . $lesrooster . '</b><br />' ; }
else
{
echo $lesrooster [ 'lestijd' ] . '<br />' ; }
}
}
?>
Bedankt voor jullie hulp!!
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.