Index waarden bepalen in een stdclass array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Helmut Achternaam

helmut Achternaam

30/10/2017 19:52:58
Quote Anchor link
ik hergroepeer een verkregen array met onderstaande code , deze werkt zoals het zou moeten werken
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php

$grouped
= array();
foreach($arreventid as $object)
{

    if(!array_key_exists($object->resource->group, $grouped))
    {

         $newObject = new stdClass();

      
        
         $newObject->TYPE = $object->resource->group;
        
         $newObject->ITEMS = array();

  
         $grouped[$object->resource->group] = $newObject;
      
        
    }


    $taskObject = new stdClass();

  

    $taskObject->ID = $object->resource->id;
    $taskObject->AANTAL = $object->number;
    $taskObject->OMSCHRIJVING = $object->resource->name;
    $grouped[$object->resource->group]->ITEMS[] = $taskObject;
 
    
   //
        
        
}
print_r($grouped);
?>



wat ik krijg als output is volgende
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Array ( [0] => stdClass Object ( [TYPE] => Locaties [ITEMS] => Array ( [0] => stdClass Object ( [ID] => 646550785-1431455652 [AANTAL] => 1 [OMSCHRIJVING] => Grote Post ) ) ) [1] => stdClass Object ( [TYPE] => Meubilair [ITEMS] => Array ( [0] => stdClass Object ( [ID] => 4257054209-1454325662 [AANTAL] => 10 [OMSCHRIJVING] => Rode stoel ) [1] => stdClass Object ( [ID] => 90384641-1433314305 [AANTAL] => 20 [OMSCHRIJVING] => Zwarte Tafels ) ) ) [2] => stdClass Object ( [TYPE] => Extra Techniek [ITEMS] => Array ( [0] => stdClass Object ( [ID] => 2515818753-1444912930 [AANTAL] => 1 [OMSCHRIJVING] => Flatscreen ) [1] => stdClass Object ( [ID] => 2477062913-1454412360 [AANTAL] => 1 [OMSCHRIJVING] => Micro ) ) ) [3] => stdClass Object ( [TYPE] => Exploitatie [ITEMS] => Array ( [0] => stdClass Object ( [ID] => 3723659521-1482508978 [AANTAL] => 10 [OMSCHRIJVING] => Handdoeken ) ) ) [4] => stdClass Object ( [TYPE] => Catering [ITEMS] => Array ( [0] => stdClass Object ( [ID] => 812009217-1433332145 [AANTAL] => 8 [OMSCHRIJVING] => standaard lunch ) [1] => stdClass Object ( [ID] => 2413223681-1450950019 [AANTAL] => 5 [OMSCHRIJVING] => lunch eigen personeel ) ) ) [5] => stdClass Object ( [TYPE] => Diverse Ko1 [ITEMS] => Array ( [0] => stdClass Object ( [ID] => 7340779521-1460472740 [AANTAL] => 1 [OMSCHRIJVING] => forfait receptie premire ) ) ) [6] => stdClass Object ( [TYPE] => Overnachting [ITEMS] => Array ( [0] => stdClass Object ( [ID] => 822193921-1433332289 [AANTAL] => 1 [OMSCHRIJVING] => single kamer ) [1] => stdClass Object ( [ID] => 826616577-1433332313 [AANTAL] => 1 [OMSCHRIJVING] => twin kamer ) [2] => stdClass Object ( [ID] => 823746049-1433332299 [AANTAL] => 1 [OMSCHRIJVING] => double kamer ) ) ) [7] => stdClass Object ( [TYPE] => Team DGP [ITEMS] => Array ( [0] => stdClass Object ( [ID] => 569591041-1432209160 [AANTAL] => 1 [OMSCHRIJVING] => Sara Vanderieck ) [1] => stdClass Object ( [ID] => 75528705-1431953348 [AANTAL] => 1 [OMSCHRIJVING] => Helmut Willems ) ) ) [8] => stdClass Object ( [TYPE] => Extra Personeel [ITEMS] => Array ( [0] => stdClass Object ( [ID] => 2552306689-1451385397 [AANTAL] => 1 [OMSCHRIJVING] => DGP technieker ) [1] => stdClass Object ( [ID] => 2452153345-1498727302 [AANTAL] => 1 [OMSCHRIJVING] => geluidstechnieker ) [2] => stdClass Object ( [ID] => 1048593153-1445504057 [AANTAL] => 1 [OMSCHRIJVING] => Jelle Van Meerbergen ) [3] => stdClass Object ( [ID] => 1050209025-1445504091 [AANTAL] => 1 [OMSCHRIJVING] => Toon Soete ) ) ) [9] => stdClass Object ( [TYPE] => Vrijwilligerswerking [ITEMS] => Array ( [0] => stdClass Object ( [ID] => 1365497601-1457356321 [AANTAL] => 1 [OMSCHRIJVING] => Artiestenonthaal ) [1] => stdClass Object ( [ID] => 3023081473-1470831288 [AANTAL] => 1 [OMSCHRIJVING] => Ticketcontrole + zaalwacht ) ) ) )



waar ik echter mijn tanden op stuk bijt is om de Indexes(getallen) te veranderen in values

Vb de hoofdindex [0,1,2...]. zou ik graag hebben dat het de variabele [$object->resource->group] wordt

iemand een idee hoe aan te pakken of waar ik dit in de code moet definiëren ?
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 30/10/2017 22:32:57 door - Ariën -
 
PHP hulp

PHP hulp

22/11/2024 05:33:22
 
Frank Nietbelangrijk

Frank Nietbelangrijk

30/10/2017 21:11:18
Quote Anchor link
Waar komt deze array vandaan? Lees je die toevallig in met json_decode()? Geef dan als tweede parameter even true mee:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$array
= json_decode($json, true);
?>


en doe eens

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo '<pre>'.print_r($arreventid, true).'</pre>';
?>


En plak de uitkomst daarvan eens in je openingspost want dat zou wel wat makkelijker leesbaar zijn.
Gewijzigd op 30/10/2017 21:16:16 door Frank Nietbelangrijk
 
Helmut Achternaam

helmut Achternaam

30/10/2017 21:14:52
Quote Anchor link
Deze komt uit een api aanroep via curl en wordt idd aangeroepen via json_decode
 
Frank Nietbelangrijk

Frank Nietbelangrijk

30/10/2017 21:17:08
Quote Anchor link
Lees mijn bovenstaande post nog eens. Had nog wat extra dingetjes er bij gezet :-)
 
Helmut Achternaam

helmut Achternaam

30/10/2017 21:28:58
Quote Anchor link
ik heb true meegegeven , dan krijg ik voor elke variabel de waarde NULL

ik zou graag de output van de oorspronkelijke willen geven (output van de API °maar hier staan massa gegevens in die niet relevant zijn en ook een beetje vertrouwelijk :-(

hieronder zie je de gecensureerde versie :-)

enkel van de eerste [0] , de andere hebben gelijke opbouw

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
Array
(
    [0] => Array
        (
            [url] => xxxxxxxx
            [id] => 3xxxxxxxx
            [_type] => xxxxxxxx
            [number] => 1
            [resource] => Array
                (
                    [url] => xxxxxxxx
                    [id] => xxxxxxxxx
                    [resourcetype] => location
                    [name] => xxxxxxxx
                    [group] => xxxxxxx
                    [roles] => Array
                        (
                        )

                    [_type] => location
                )

            [children] => Array
                (
                    [0] => Array
                        (
                            [url] => xxxxxxxxx
                            [id] => xxxxxxxxx
                            [owner] => Array
                                (
                                    [url] => xxxxxxxxx
                                    [id] => xxxxxxxxx
                                    [name] => xxxxxxxxx
                                )

                            [owningteam] => Array
                                (
                                    [url] => xxxxxxxxx
                                    [id] => xxxxxxxxx
                                    [name] => xxxxxxxxx
                                )

                            [owninggroup] => Array
                                (
                                    [url] => hxxxxxxxxx
                                    [id] => xxxxxxxxx
                                    [name] => xxxxxxxxx
                                )

                            [_type] => resourcebooking
                            [number] => 1
                            [resource] => Array
                                (
                                    [url] => xxxxxxxxx
                                    [id] => xxxxxxxxx
                                    [resourcetype] => location
                                    [name] => xxxxxxxxx
                                    [group] => Locaties
                                    [roles] => Array
                                        (
                                        )

                                    [_type] => location
                                )

                            [start] => xxxxxxxxx
                            [end] => xxxxxxxxx
                            [event] => Array
                                (
                                    [url] => xxxxxxxxx
                                    [id] => xxxxxxxxx
                                    [name] => xxxxxxxxx
                                    [_type] => xxxxxxxxx
                                )

                            [role] =>
                        )

                )

            [event] => Array
                (
                    [url] => xxxxxxxxx
                    [id] => xxxxxxxxx
                    [name] => xxxxxxxxx
                    [_type] => xxxxxxxxx
                )

        )

    [1] => Array

[\code]

    enz . . . . .
Gewijzigd op 30/10/2017 21:36:27 door helmut Achternaam
 
Frank Nietbelangrijk

Frank Nietbelangrijk

30/10/2017 21:33:27
Quote Anchor link
Zou fijn zijn als je hem nog even tussen [code] en [/code] kan zetten dan zien we ook de tabs. Gecensureerde versie is uiteraard prima zolang de structuur maar klopt.

Toevoeging op 30/10/2017 21:37:44:

En wat zou je aan het eind willen overhouden? (voorbeeldje)


Toevoeging op 30/10/2017 21:38:17:

Edit:

een stuk beter leesbaar vindt je niet ;-)

Toevoeging op 30/10/2017 22:07:30:

De buitenste lus kan je in ieder geval met een foreach doorlopen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
foreach($arreventid as $object) // <-- gebruik ipv object beter een naam die ons wat meer vertelt...
{
    // ...
}
?>

Dan kun je de elementen er onder benaderen op deze manier
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
foreach($arreventid as $object)
{

    echo $object['url'];
    echo $object['id'];
    // etc
}
?>


$object['resource'] is echter een associatieve array. Die zou je dan kunnen benaderen met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    echo $object['resource']['url'];
    echo $object['resource']['id'];
    // etc
?>


Voor $object['children'] geldt dat dit ook weer een normale (numerieke) array is. dus die loop je ook door met een foreach. Eindresultaat wordt dan iets als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
foreach($arreventid as $object)
{

    echo $object['url'] . '<br>';
    echo $object['id'] . '<br>';
    // etc

    echo $object['resource']['url'] . '<br>';
    echo $object['resource']['id'] . '<br>';
    // etc

    foreach($object['children'] as $child)
    {

        echo $child['url'] . '<br>';
        echo $child['id'] . '<br>';
        //etc
    }

    echo '<br><br>';
}

?>
Gewijzigd op 31/10/2017 01:15:30 door Frank Nietbelangrijk
 
Helmut Achternaam

helmut Achternaam

31/10/2017 09:03:19
Quote Anchor link
bedankt voor de aanvullingen.
De initiele code groepeert de oorspronkelijke array naar een nieuwe array op Group.
De bedoeling is om de Indexnames te veranderen door de Groupwaarde (dus de cijfers weg , maar veranderen door woorden).
Zo kan ik later in mijn code direct de array aanroepen welke ik wens zonder telkens foreach te gebruiken en vergelijkingen uit te voeren.

de output zou iets moeten zijn zoals volgende

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Array
(
    [waardeuitgroup] => Array
            (
                 [0] => Array
                     (
                    
                     [number] => 1
                     [name] => xxxxxxxx
                     )
                [1] => Array
                     (
                    
                     [number] => 10
                     [name] => xxxxxxxx
                     )
            )
            
    [waardeuitgroup2] => Array
        (
                 [0] => Array
                     (
                    
                     [number] => 4
                     [name] => xxxxxxxx
                     )
                [1] => Array
                     (
                    
                     [number] => 20
                     [name] => xxxxxxxx
                     )
            )
            
)

enz . . .
Gewijzigd op 31/10/2017 09:07:17 door helmut Achternaam
 
Frank Nietbelangrijk

Frank Nietbelangrijk

31/10/2017 18:42:06
Quote Anchor link
Gewoon opnieuw opbouwen. Je bent niet erg duidelijk over welke groep of groepen je het hebt. Bedoel je zoiets ?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
Array
(
    [
owner] => Array
            (
                 [
0] => Array
                     (
                    
                     [
number] => 1
                     [name] => xxxxxxxx
                     )
                [
1] => Array
                     (
                    
                     [
number] => 10
                     [name] => xxxxxxxx
                     )
            )
            
    [
owningteam] => Array
        (
                 [
0] => Array
                     (
                    
                     [
number] => 4
                     [name] => xxxxxxxx
                     )
                [
1] => Array
                     (
                    
                     [
number] => 20
                     [name] => xxxxxxxx
                     )
            )
            
)

?>
 
Helmut Achternaam

helmut Achternaam

31/10/2017 18:51:32
Quote Anchor link
beste


zoiets inderdaad maar Owner en ownergroup is telkenmale de value uit. [group] => Locaties

dus vb owner moet Locaties zijn en ownergroup moet vb iets anders zijn

Het ding is als ik de gewone output heb van de api , dan krijg ik 15 waarden ( van 1 tot 15)

ik wil deze hergroepeert zien op het veld [group] met daaronder de verschillende waarden (mag numeriek zijn)

zo kan ik later dan vb voor een bepaalde gekende groep een for each doen

ik kijk morgen verder en probeer anders zelf te herscrhrijven
 
Thomas van den Heuvel

Thomas van den Heuvel

31/10/2017 19:44:27
Quote Anchor link
Dus. Je wilt on-the-fly data herstructureren uit een externe bron, waarbij je groepeert op een element-waarde. Dit zou niet zo moeilijk moeten zijn? Je hebt een attribuut (zeg X) op grond waarvan je wilt groeperen. Wat je achtereenvolgens doet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
declareer nieuwe dataset D
loop door externe data E heen
    bestaat key X al in D?
        nee -> creeer X in D
    // op dit moment bestaat X dus altijd in D
    voeg huidig record E toe aan D[X]
einde loop
 
Frank Nietbelangrijk

Frank Nietbelangrijk

31/10/2017 19:45:00
Quote Anchor link
Probeer het onderstaande eens uit en dan zelf aan te passen..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$data
= array();

foreach($arreventid as $object)
{

    foreach($object['children'] as $child)
    {

        $data['Locaties'][]['group'] = $child['resource']['group'];
        $data['Iets anders'][]['name'] = $child['owner']['name'];
    }
}


echo '<pre>'.print_r($data, true).'</pre>';
?>
Gewijzigd op 31/10/2017 19:45:26 door Frank Nietbelangrijk
 
Helmut Achternaam

helmut Achternaam

07/11/2017 09:19:23
Quote Anchor link
Thomas van den Heuvel op 31/10/2017 19:44:27:
Dus. Je wilt on-the-fly data herstructureren uit een externe bron, waarbij je groepeert op een element-waarde. Dit zou niet zo moeilijk moeten zijn? Je hebt een attribuut (zeg X) op grond waarvan je wilt groeperen. Wat je achtereenvolgens doet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
declareer nieuwe dataset D
loop door externe data E heen
    bestaat key X al in D?
        nee -> creeer X in D
    // op dit moment bestaat X dus altijd in D
    voeg huidig record E toe aan D[X]
einde loop



Dit is eigenlijk wat ik nodig heb

wat ik nu gedaan heb is dit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$grouped = array();
foreach($arreventid as $object)
{
                                    
  $data[$object->resource->group][] =$object->resource->name;
  $data[$object->resource->group][][][aantal] =$object->number;
      
        
}


echo '<pre>'.print_r($data, true).'</pre>';

                ?>




dan krijg ik dit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Array
(
    [Locaties] => Array
        (
            [0] => Grote Post
            [1] => Array
                (
                    [0] => Array
                        (
                            [aantal] => 1
                        )

                )

        )

    [Meubilair] => Array
        (
            [0] => Rode stoel
            [1] => Array
                (
                    [0] => Array
                        (
                            [aantal] => 10
                        )

                )

            [2] => Zwarte Tafels
            [3] => Array
                (
                    [0] => Array
                        (
                            [aantal] => 20
                        )

                )

        )
. . . . .



maar eigenlijk moet ik dit hebben

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Array
(
    [Locaties] => Array
        (
            [0]
                (
                    [Naam] => Grote Post
                    [aantal] => 1
                  )

                

        )

    [Meubilair] => Array
        (
        
        [0]
                (
                    [Naam] => Rode Stoel
                    [aantal] => 15
                  )

                  
        [1]
                (
                    [Naam] => Zwarte tafels
                    [aantal] => 20
                 )

        )


ik voel dat ik de buurt ben van wat ik wil maar nog niet helemaal , iemand ??


EDIT :

en gevonden

heb dit gerbuikt

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
  $data[$object->resource->group][] =array("naam" => $object->resource->name,"aantal" => $object->number,);
Gewijzigd op 07/11/2017 10:10:23 door helmut Achternaam
 
Frank Nietbelangrijk

Frank Nietbelangrijk

07/11/2017 20:34:18
Quote Anchor link
Als eerste: Zorg dat je foutmeldingen te zien krijgt. Je kunt dat doen door je php instellingen in php.ini te wijzigen of door het volgende aan het begin van je script te plaatsen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
?>


Dan zou je moeten zien dat er iets niet klopt in je code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
[aantal] vs ['aantal']


Vervolgens zul je een dubbele lege bracket nooit nodig hebben. $data[$object->resource->group][][][aantal] is dus klinkklare onzin. Probeer het volgende voor de Locaties:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

$grouped
= array();

foreach($arreventid as $object)
{

                                    
  $data[$object->resource->group][]['naam'] = $object->resource->name;
  $data[$object->resource->group][]['aantal'] =$object->number;
      
        
}


?>


Toevoeging op 07/11/2017 20:39:36:

een lege bracket maakt een nieuwe item aan in een array en nummert deze automatisch.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

$data
= array(); // lege array, nog geen elementen in de array geplaatst.

$data[] = 'eerste element'; // array met één element die index 0 heeft. (computers tellen vanaf nul remember?)
$data[] = 'tweede element'; // array met twee elementen, Index 0 en index 1.
$data[] = 'derde element';  // array met drie elementen. Index 0, 1 en 2.
?>

ENZOVOORT
 
Thomas van den Heuvel

Thomas van den Heuvel

08/11/2017 16:25:27
Quote Anchor link
Heel strict genomen bestaat $data[$object->resource->group] de eerste keer dat je hier een toekenning aan doet niet (lijkt mij? sinds je een []-toekenning gebruikt?). Ik weet niet of dat tegenwoordig nog echt een probleem is? Ik bedoel je begint direct met het toekennen van een waarde aan iets niet-bestaands. Mijn abstracte stukje code ondervangt dit en garandeert dat het (sub)array altijd gedefinieerd is.

Al is het mogelijk niet strict noodzakelijk, het lijkt mij nog steeds een goede gewoonte om alle variabelen te definiëren voordat je ze gebruikt.

Ook weet ik niet of:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$grouped
= array();

foreach($arreventid as $object)
{

  $data[$object->resource->group][]['naam'] = $object->resource->name;
  $data[$object->resource->group][]['aantal'] =$object->number;
}

?>

Het gewenste resultaat oplevert? Op deze manier vallen naam en aantal toch niet onder dezelfde index? Mogelijk bedoelde je:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$grouped
= array();

foreach ($arreventid as $object)
{

  $grouped[$object->resource->group][] = array(
    'naam' => $object->resource->name,
    'aantal' => $object->number,
  );
}

?>

Met dus de toevoeging dat je $grouped[$object->resource->group] altijd eerst zou moeten definiëren.

Simpelweg omdat iets werkt, maakt het nog niet juist.
Gewijzigd op 08/11/2017 16:52:22 door Thomas van den Heuvel
 
Frank Nietbelangrijk

Frank Nietbelangrijk

08/11/2017 17:23:20
Quote Anchor link
ehrg je hebt gelijk Thomas. Ben in de war, jouw tweede stukje code moet het doen.
 
Helmut Achternaam

helmut Achternaam

08/11/2017 18:29:36
Quote Anchor link
Iedereen bedankt voor de replays , had gisterenochtend nog een Edit gedaan van laatste post met de Codelijn erin , deze komt overeen met wat jullie achteraf hebben gesuggereerd.

iedereen dus bedankt , weer bijgeleerd
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.