Radeloze php foreach probleem

helmuteke
Premium Member
Premium Member
Berichten: 453
Lid geworden op: 08 Feb 2010
Bedankt: 24 keer
Uitgedeelde bedankjes: 2 keer

Radeloze php foreach probleem

Berichtdoor helmuteke » 24 Okt 2018, 19:24

zit nu al 2 dagen mijn tanden stuk te bijten op onderstaande

ik heb volgende array

Code: Selecteer alles

print "<pre>";
print_r($aantal);
print "</pre>";

Array
(
    [5048132097-1537439059] => Array
        (
            [ COTM ] => Array
                (
                    [tijdstip] => 20:30
                    [0] => Array
                        (
                            [traiteur] =>  COTM
                            [aantal] => 10
                            [naam] =>  Menu
                            [type] =>
                            [wie] =>  Residentie
                            [datum] => 03/09/2018
                        )

                    [1] => Array
                        (
                            [traiteur] =>  COTM
                            [aantal] => 1
                            [naam] =>  Menu
                            [type] =>
                            [wie] =>  Extern
                            [datum] => 03/09/2018
                        )

                    [2] => Array
                        (
                            [traiteur] =>  COTM
                            [aantal] => 1
                            [naam] =>  Menu
                            [type] =>  V
                            [wie] =>  Andere
                            [datum] => 03/09/2018
                        )

                    [3] => Array
               
            enz . . . .




ik doe onderstaande for each loops

Code: Selecteer alles


foreach($aantal as $trat1)
            {
         
            foreach($trat1 as $trat2)
               {
                  print $trat2['tijdstip'] . "<BR>";
                  
                  foreach($trat2 as $trat3)
                  
                  {
                     print $trat3['wie'] . " -" . $trat3['aantal']  . "<BR>";
                  }
                  
               }
               
               
               
            }



en krijg volgend resultaat

Code: Selecteer alles

20:30
2 -2
Residentie -10
Extern -1


Het probleem zit hem bij de 2 - 2 , van waar in hemelsnaam haalt hij dit ??? bij verdere output van array heb ik dit ook.
Het is telkens de eerste character van de value erboven

Iemand een idee ??

Gebruikersavatar
Splitter
Elite Poster
Elite Poster
Berichten: 3911
Lid geworden op: 10 Mar 2010
Bedankt: 399 keer
Recent bedankt: 4 keer
Uitgedeelde bedankjes: 55 keer

Re: Radeloze php foreach probleem

Berichtdoor Splitter » 24 Okt 2018, 20:06

heb niet echt superveel tijd maar je loop is toch absurd als ik vlug erover ga?
key value paar zou logischer zijn denk ik, of op zijn minst snap ik niet waarom je elke keer een nieuwe waarde aan dezelfde array geeft?


zoiets (let op, wss totaal geen werkende code, je moet ff het aanpassen en ik ga geen garanties geven op 2 seconde code zonder je array echt te bekijken)

Code: Selecteer alles

foreach($aantal as $key -> $value)
            {
         
           print $key['tijdstip'] . "<BR>";
                  $keyprint $trat3['tijdstip']['wie'] . " -" . $trat3['tijdstip']['aantal']  . "<BR>";
                  }


als je me in pm een keer de pure array (zoals die aan je script geleverd is)


vlugge edit: probeer deze foreach een keer en laat me ff weten wat die geeft:

Code: Selecteer alles

foreach($aantal as $list => $item)            {     
print $item['tijdstip'] . "<BR>";   
            foreach($item as $key => $value)
               {
                     print $value['wie'] . " -" . $value['aantal']  . "<BR>";
               }
           }


(also, je array kan zowiezo mooier en dan heb je dit soort zoekwerk niet)
ooit zal hier iets nuttigs staan

Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16011
Lid geworden op: 18 Feb 2003
Twitter: meon
Locatie: Bree
Bedankt: 594 keer
Recent bedankt: 7 keer
Uitgedeelde bedankjes: 507 keer
Contact:

Re: Radeloze php foreach probleem

Berichtdoor meon » 24 Okt 2018, 23:20

Die array $aantal is vreselijk.
Aangezien je geen serialized string hier meegaf zelf gemaakt:

Code: Selecteer alles

$aantal['5048132097-1537439059']['COTM'] = [
    'tijdstip' => '20:30',
    [
        'traiteur' => 'COTM',
        'aantal' => 10,
        'naam' => 'menu',
        'type' => '',
        'wie' => 'residentie',
        'datum' => '03/09/2018'
    ],
    [
        'traiteur' => 'COTM',
        'aantal' => 1,
        'naam' => 'Menu',
        'type' => 'V',
        'wie' => 'Andere',
        'datum' => '03/09/2018'
    ]
]; 

Je ziet hier misschien beter dat je "tijdstip" en dan die entries vanaf 0 zich allemaal ophetzelfde niveau bevinden. Je loopt met andere woorden over verschillende datatypen heen (key/value-paar 'tijdstip', daarna indexed arrays), maar in je loop benader je alles op dezelfde manier en krijg je deze fout:

Code: Selecteer alles

Array
(
    [5048132097-1537439059] => Array
        (
            [COTM] => Array
                (
                    [tijdstip] => 20:30
                    [0] => Array
                        (
                            [traiteur] => COTM
                            [aantal] => 10
                            [naam] => menu
                            [type] =>
                            [wie] => residentie
                            [datum] => 03/09/2018
                        )

                    [1] => Array
                        (
                            [traiteur] => COTM
                            [aantal] => 1
                            [naam] => Menu
                            [type] => V
                            [wie] => Andere
                            [datum] => 03/09/2018
                        )

                )

        )

)
20:30
PHP Warning:  Illegal string offset 'wie' in C:\Temp\array-ub.php on line 29

Warning: Illegal string offset 'wie' in C:\Temp\array-ub.php on line 29
PHP Warning:  Illegal string offset 'aantal' in C:\Temp\array-ub.php on line 29

Warning: Illegal string offset 'aantal' in C:\Temp\array-ub.php on line 29
2 - 2
residentie - 10
Andere - 1

Je kan niet via loops zomaar door zo'n array navigeren, want da's net het punt van een loop: dat alles zich op dezelfde manier gedraagt.

Dat jij die warnings niet ziet (had je wellicht wat hersenbrekers bespaard) is omdat mogelijk deze door je php.ini onderdrukt worden. Ik heb mijn code gewoon in de console uitgevoerd via PHP 7.2.9.

Indien je geen controle hebt over array $aantal kan je denk ik het beste dit doen:

Code: Selecteer alles

echo $aantal['5048132097-1537439059']['COTM']['tijdstip'] . PHP_EOL;
foreach ($aantal['5048132097-1537439059']['COTM'] as $item) {
    if (is_array($item)) {
        echo $item['wie'] . " - " . $item['aantal'] . PHP_EOL;
    }

Resulteert in:

Code: Selecteer alles

20:30
residentie - 10
Andere - 1

Gebruikersavatar
Splitter
Elite Poster
Elite Poster
Berichten: 3911
Lid geworden op: 10 Mar 2010
Bedankt: 399 keer
Recent bedankt: 4 keer
Uitgedeelde bedankjes: 55 keer

Re: Radeloze php foreach probleem

Berichtdoor Splitter » 24 Okt 2018, 23:29

@meon: had quasi hetzelfde idd al in een priveberichtje aan de OP gegeven :)
(maar ook aangeraden van idd de arrays properder te maken)

php debugging output had ik zelf wel niet aan gedacht... is ook weer waar dat dat bestaat :D
(als het nog werkt(?) is idd in je code tijdens dev even bovenaan error_reporting(E_ALL) bij zetten)
ooit zal hier iets nuttigs staan

Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16011
Lid geworden op: 18 Feb 2003
Twitter: meon
Locatie: Bree
Bedankt: 594 keer
Recent bedankt: 7 keer
Uitgedeelde bedankjes: 507 keer
Contact:

Re: Radeloze php foreach probleem

Berichtdoor meon » 24 Okt 2018, 23:40

Stom dat er discussie via PM liep, dan had ik me wellicht wat moeite kunnen besparen.

Pro-tip: Als je helemaal wilt kunnen steppen door je loops kan je Xdebug gebruiken via Visual Studio Code (=open source en gratis).
Je zet dan een breakpoint ergens in je code (bvb op de echo) en dan stopt de uitvoer op dat punt en kan je console-gewijs de inhoud van variabelen op dat moment opvragen.
Afbeelding
https://marketplace.visualstudio.com/it ... .php-debug


Terug naar “Web-en applicatie-ontwikkeling”

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers en 1 gast