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

Fermé
mariostar27 Messages postés 391 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 21 août 2015 - Modifié par jordane45 le 4/12/2014 à 18:54
kangourouxxx Messages postés 71 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 6 mars 2015 - 13 févr. 2015 à 10:59
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
A voir également:

1 réponse

kangourouxxx Messages postés 71 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 6 mars 2015 2
13 févr. 2015 à 10:59
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