login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Multidimensionele array uitlezen (Opgelost)

Offline Martnt - 05/09/2011 12:12
Avatar van MartntNieuw 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:

  1. (
  2. [0] => Array
  3. (
  4. [dag] => Maandag 05-september-2011
  5. [0] => Array
  6. (
  7. [lestijd] => 13:30 - 15:00
  8. [vak] => Diagnostisch onderzoek 2a: theorie
  9. [lokaal] => C189
  10. [docent] => G. Roemer
  11. )
  12.  
  13. )
  14.  
  15. [1] => Array
  16. (
  17. [dag] => Dinsdag 06-september-2011
  18. [0] => Array
  19. (
  20. [lestijd] => 08:30 - 10:00
  21. [vak] => Leer- en gedragsproblemen 1
  22. [lokaal] => C061
  23. [docent] => G.M.E. Verweij
  24. )
  25.  
  26. [1] => Array
  27. (
  28. [lestijd] => 10:30 - 12:00
  29. [vak] => Coaching, counseling en training 2a
  30. [lokaal] => B323
  31. [docent] => A. de Koning
  32. )
  33.  
  34. [2] => Array
  35. (
  36. [lestijd] => 13:30 - 15:00
  37. [vak] => SLB / Internationalisering
  38. [lokaal] => A349
  39. [docent] => M.J.E. van der Klis
  40. )
  41.  
  42. [3] => Array
  43. (
  44. [lestijd] => 15:15 - 16:45
  45. [vak] => Leer- en gedragsproblemen 1
  46. [lokaal] => A153
  47. [docent] => W.E.H. Boon-Wensenk
  48. )
  49.  
  50. )
  51.  
  52. [2] => Array
  53. (
  54. [dag] => Woensdag 07-september-2011
  55. [0] => Array
  56. (
  57. [lestijd] => 15:15 - 16:45
  58. [vak] => Toegepast onderzoek 2a: observeren en experimenteren
  59. [lokaal] => C189
  60. [docent] => M.A. Farfan Galindo
  61. )
  62.  
  63. )
  64.  
  65. [3] => Array
  66. (
  67. [dag] => Vrijdag 09-september-2011
  68. [0] => Array
  69. (
  70. [lestijd] => 08:30 - 12:00
  71. [vak] => Toegepast onderzoek 2a: observeren en experimenteren
  72. [lokaal] => A153
  73. [docent] => M.A. Farfan Galindo
  74. )
  75.  
  76. [1] => Array
  77. (
  78. [lestijd] => 13:30 - 16:00
  79. [vak] => Diagnostisch onderzoek 2a: intelligentie
  80. [lokaal] => B430
  81. [docent] => M.J.E. van der Klis
  82. )
  83.  
  84. )
  85.  
  86. )


Alvast hartelijk bedankt voor je hulp!!!

Dankje,
Martnt

11 antwoorden

Gesponsorde links
Offline vinTage - 05/09/2011 12:26
Avatar van vinTage 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.
Offline Dlol - 05/09/2011 12:41 (laatste wijziging 05/09/2011 12:41)
Avatar van Dlol Lid
  1. // Eerst de volledige array aflopen
  2. foreach ($volledigeArray as $subArray) {
  3.  
  4. // Nu alle subarrays aflopen
  5. foreach ($subArray as $key => $value) {
  6.  
  7. // Kijk nu of het de dag betreft
  8. if ($key != "dag") {
  9.  
  10. // Loop alle overige arrays af
  11. foreach ($value as $key2 => $value2) {
  12.  
  13. // Hier zit je nu op het niveau van lestijd, vak docent etc.
  14. echo $key2 . ": " . $value2[$key2];
  15.  
  16. }
  17.  
  18. }
  19.  
  20. }
  21.  
  22. }
Bedankt door: Martnt
Offline Martnt - 05/09/2011 12:54
Avatar van Martnt Nieuw lid Bedankt Dlol maar het werkt helaas niet... Dit is de code die ik gebruik om alles in de array te zetten:

  1. <?php
  2. include_once ( 'simple_html_dom.php' );
  3.  
  4. $html = file_get_html ( 'http://roosters.saxion.nl/index.php?klas=DTP2VE&intraprof=AMA+TP+vt+D&lang=NL&weekoffset=&printversie' );
  5. $html = preg_replace ( '/<tr class="tabeltitel">/', '</div></table><div class="lesdagen"><table class="lesinhoud"><tr class="tabeltitel">', $html );
  6. $html = str_replace ( ' ', ' ', $html );
  7. $html = str_get_html ( $html );
  8.  
  9. $i_Dag = 0;
  10.  
  11. foreach ( $html->find('div.lesdagen') as $lessen )
  12. {
  13. foreach ( $lessen->find('table.lesinhoud') as $inhoud)
  14. {
  15. $a_Dag[$i_Dag]['dag'] = $inhoud->find('td.celtitel',0)->plaintext; $i =0;
  16.  
  17. while($inhoud->find('td.celtijd', $i) == true)
  18. {
  19. $a_Dag[$i_Dag][] = array(
  20. 'lestijd' => @$inhoud->find('td.celtijd',$i)->plaintext,
  21. 'vak' => @$inhoud->find('div.floatLeft', $i)->plaintext,
  22. 'lokaal' => @$inhoud->find('td.cellokaal', $i)->plaintext,
  23. 'docent' => @$inhoud->find('td.celdocent', $i)->plaintext
  24. );
  25. $i++;
  26. }
  27.  
  28. $i_Dag ++;
  29. }
  30. }
  31.  
  32. //echo '<pre>' . print_r ( $a_Dag,1 ) . '</pre>';
  33. ?>


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?
Offline Dlol - 05/09/2011 13:18
Avatar van Dlol 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?
Offline Martnt - 05/09/2011 13:20
Avatar van Martnt 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.
Offline Dlol - 05/09/2011 13:29
Avatar van Dlol Lid Excuses, ik zat even in javascript te denken. Het moet zijn:

  1. echo $key2 . ": " . $value2;


ipv
  1. echo $key2 . ": " . $value2[$key2];
Bedankt door: Martnt
Offline Martnt - 05/09/2011 14:02 (laatste wijziging 05/09/2011 14:06)
Avatar van Martnt 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...
Offline WouterJ - 05/09/2011 14:16
Avatar van WouterJ HTML gevorderde Alleen de dagen uitlezen:
  1. foreach( $jouwArray as $multiArray )
  2. {
  3. # $multiArray bevat nu elke waarde van $jouwArray[0], $jouwArray[1], enz.
  4. # Als je we nu $multiArray['dag'] doe vragen we eigenlijk $jouwArray[0]['dag'] op,
  5. # precies wat we willen!
  6. echo 'De datum: '.$multiArray['dag']."<br />\n";
  7. }
Bedankt door: Martnt
Offline Martnt - 05/09/2011 14:28 (laatste wijziging 05/09/2011 14:35)
Avatar van Martnt 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:

  1. foreach( $a_Dag as $multiArray )
  2. {
  3. # $multiArray bevat nu elke waarde van $jouwArray[0], $jouwArray[1], enz.
  4. # Als je we nu $multiArray['dag'] doe vragen we eigenlijk $jouwArray[0]['dag'] op,
  5. # precies wat we willen!
  6. echo $multiArray['dag'] . '<br />';
  7.  
  8. foreach ( $multiArray as $key => $lesrooster )
  9. {
  10. if ( $key != 'dag' )
  11. {
  12. echo $lesrooster['lestijd'] . '<br />';
  13. }
  14. }
  15. }


Het enige probleem wat hij dan geeft is dat hij dit output:
  1. Maandag 05-september-2011
  2. Dinsdag 06-september-2011
  3. 10:30 - 12:00
  4. 13:30 - 15:00
  5. 15:15 - 16:45
  6. Woensdag 07-september-2011
  7. Vrijdag 09-september-2011
  8. 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:
  1. [0] => Array
  2. (
  3. [lestijd] => 13:30 - 15:00
  4. [vak] => Diagnostisch onderzoek 2a: theorie
  5. [lokaal] => C189
  6. [docent] => G. Roemer
  7. )
Offline WouterJ - 05/09/2011 14:48
Avatar van WouterJ HTML gevorderde Met deze code zou je het moeten lukken:
  1. foreach( $jouwArray as $multiArray )
  2. {
  3. foreach( $multiArray as $key => $lesrooster )
  4. {
  5. if( $key == 'dag' )
  6. {
  7. echo $lesrooster."<br />\n";
  8. }
  9. else
  10. {
  11. echo $lesrooster['lestijd']."<br />\n";
  12. }
  13. }
  14. }
Offline Martnt - 05/09/2011 15:51 (laatste wijziging 06/09/2011 09:35)
Avatar van Martnt Nieuw lid EDIT:

Ik heb het inmiddels zo opgelost en het werkt nu perfect 

  1. <?php
  2. include_once ( 'simple_html_dom.php' );
  3.  
  4. $html = file_get_html ( 'http://roosters.saxion.nl/index.php?klas=DTP2VE&intraprof=AMA+TP+vt+D&lang=NL&weekoffset=&printversie' );
  5. $html = preg_replace ( '/<tr class="tabeltitel">/', '</div></table><div class="lesdagen"><table class="lesinhoud"><tr class="tabeltitel">', $html );
  6. $html = str_replace ( ' ', ' ', $html );
  7. $html = str_get_html ( $html );
  8.  
  9. $i_Dag = 0;
  10.  
  11. foreach ( $html->find('div.lesdagen') as $lessen )
  12. {
  13. foreach ( $lessen->find('table.lesinhoud') as $inhoud)
  14. {
  15. $a_Dag[$i_Dag][] = $inhoud->find('td.celtitel',0)->plaintext; $i = 0;
  16.  
  17. while ( $inhoud->find('td.celtijd', $i) == true )
  18. {
  19. $a_Dag[$i_Dag][] = array(
  20. 'lestijd' => @$inhoud->find('td.celtijd',$i)->plaintext,
  21. 'vak' => @$inhoud->find('div.floatLeft', $i)->plaintext,
  22. 'lokaal' => @$inhoud->find('td.cellokaal', $i)->plaintext,
  23. 'docent' => @$inhoud->find('td.celdocent', $i)->plaintext
  24. );
  25. $i++;
  26. }
  27.  
  28. $i_Dag ++;
  29. }
  30. }
  31.  
  32. foreach( $a_Dag as $multiArray )
  33. {
  34. foreach( $multiArray as $key => $lesrooster )
  35. {
  36. if( $key == 0 )
  37. {
  38. echo '<b>' . $lesrooster . '</b><br />';
  39. }
  40. else
  41. {
  42. echo $lesrooster['lestijd'] . '<br />';
  43. }
  44. }
  45. }
  46. ?>


Bedankt voor jullie hulp!!
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.295s