PHP : grouper un tableau en fonction de se qu'il contient

mariostar27 Messages postés 442 Statut Membre -  
kangourouxxx Messages postés 78 Statut Membre -
Bonjour ,

Je souhaite créer un script qui puisse me regrouper les données d'un tableau. Parce qu'a mon sens un exemple est toujours plus clair, le voici :

Je souhaite que mon tableau si dessous :

array(
    0 => array(
        'Diplome 1' => array(1, 2, 3, 4, 5, 6),
        'Diplome 2' => array(7)
    ),
    1 => array(
        'Classe 1' => array(1, 2, 3, 4),
        'Classe 2' => array(5, 6),
        'Classe 3' => array(7),
    )
)


Deviennent ceci :

array(
    'Diplome 1' => array(
        'Classe 1' => array(1, 2, 3, 4),
        'Classe 2' => array(5, 6)
    ),
    'Diplome 2' => array(
        'Classe 3' => array(7)
    ),
)


Ce qu'il faut savoir, c'est que la valeur 0 ou 1 dans le premier tableau indique le niveau de la dimension dans le tableau final. ici, 0 indique les diplômes et 1 indique les classes.
Également, il faut savoir qu'il peut y avoir plusieurs niveau (les tableaux si dessous ne sont que des exemples).

Bref, je galère depuis ce midi à trouver un script. Je pense qu'il faut utiliser les fonctions récursives.

Merci de votre aide.

Cordialement.

gwennael

1 réponse

  1. kangourouxxx Messages postés 78 Statut Membre 2
     
    Bonjour,
    je viens de te faire ça :
    //code pour mariostar27
    <?php
    
    $arrayBase = array(
        0 => array(
            'Diplome 1' => array(1, 2, 3, 4, 5, 6),
            'Diplome 2' => array(7)
        ),
        1 => array(
            'Classe 1' => array(1, 2, 3, 4),
            'Classe 2' => array(5, 6),
            'Classe 3' => array(7),
        )
    );
    
    $diplomes = $arrayBase[0];
    $classes = $arrayBase[1];
    $compress = null;
    
    foreach($diplomes as $diplome=>$diArray){ //diArray bel calembour non ?
    	
    	foreach($classes as $classe=>$clArray){
    		foreach($clArray as $item){
    			if(in_array($item, $diArray)){
    				$compress[$diplome][$classe] = $clArray;
    				break;
    			}
    		}
    	}
    }
    
    var_dump($compress);
    
    ?>


    Voici la sortie :

    array (size=2)
    'Diplome 1' =>
    array (size=2)
    'Classe 1' =>
    array (size=4)
    0 => int 1
    1 => int 2
    2 => int 3
    3 => int 4
    'Classe 2' =>
    array (size=2)
    0 => int 5
    1 => int 6
    'Diplome 2' =>
    array (size=1)
    'Classe 3' =>
    array (size=1)
    0 => int 7

    0