ik hergroepeer een verkregen array met onderstaande code , deze werkt zoals het zou moeten werken

<?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

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 première ) ) ) [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 ?
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:

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


$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


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


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


  $data[$object->resource->group][] =array("naam" => $object->resource->name,"aantal" => $object->number,);
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:

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
?>

Dan zou je moeten zien dat er iets niet klopt in je code:

[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:

<?php

$grouped = array();

foreach($arreventid as $object)
{

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


}

?>

[size=xsmall]Toevoeging op 07/11/2017 20:39:36:[/size]

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

<?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
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:
<?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:
<?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.
ehrg je hebt gelijk Thomas. Ben in de war, jouw tweede stukje code moet het doen.
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

Reageren