Garder uniquement les enregistrements présents dans un tableau

Par jouvrard, il y a 6 ans


Bonjour,

J'ai actuellement 2 tableaux qui se présentent comme ceci:

Tableau 1:

array 0 => array 'formationIntitule' => string XXXXXX' 'objectifPro2' => string 'Remise à niveau' 'objectifPro6' => string 'Autres' 'formNiveau' => string 'Satisfaisant' 'formAccueil' => string 'Satisfaisant' 'formRespect' => string 'Très satisfaisant' 'formContenu' => string 'Très satisfaisant' 'formSupport' => string 'Très satisfaisant' 'formRythme' => string 'Très satisfaisant' 'formDuree' => string 'Très satisfaisant' 'formPedago' => string 'Très satisfaisant' 'formDispo' => string 'Très satisfaisant' 'formOrga' => string 'Satisfaisant' 'eval' => string '9' 1 => array 'formationIntitule' => string 'XXXX' 'formNiveau' => string 'Satisfaisant' 'formAccueil' => string 'Très satisfaisant' 'formRespect' => string 'Satisfaisant' 'formContenu' => string 'Satisfaisant' 'formSupport' => string 'Satisfaisant' 'formRythme' => string 'Très satisfaisant' 'formDuree' => string 'Très satisfaisant' 'formPedago' => string 'Très satisfaisant' 'formDispo' => string 'Très satisfaisant' 'formOrga' => string 'Satisfaisant' 'eval' => string '9'

Tableau 2

array 0 => array 'formationIntitule' => string 'Anglais' 1 => array 'formationIntitule' => string Français' 2 => array 'formAccueil' => string 'Satisfaisant'

Je souhaiterais supprimer du tableau 1 tous les enregistrements ne correspondant pas au tableau 2.
En gros dans ce cas précis, je ne veux garder dans le tableau 1 que les enregistrements avec "formationInitule" égal à "Anglais" ou "Français", ainsi que les "formAccueil" = "Satisfaisant"

Je tourne en rond depuis un moment sans trouver la solution qui doit être toute bête…

Il y a bien la solution consistant à passer en revu les éléments du tableau 2, et pour chacun vérifier s'il sont présents dans le tableau 2 (et supprimer ce qu'il faut), mais peut-être existe-t-il des fonctions déjà faites pour ça?

Par avance, merci!

4 réponses

eltharin, il y a 6 ans

avec des array_map et array_intersect il doit pouvoir se faire des trucs, ou avec un array filter,
Mais pour bien comprendre, tu souhaites garder toute la ligne du tableau 1 si l'une des condition est remplie ou filtrer sur la ligne que les clés présentes dans le tableau 2?

immaginons que tab 1 :
array
0 =>
array
'formationIntitule' => string Français'
'objectifPro2' => string 'Remise à niveau'
'objectifPro6' => string 'Autres'
'formNiveau' => string 'Satisfaisant'
'formAccueil' => string 'Satisfaisant'
'formRespect' => string 'Très satisfaisant'
'formContenu' => string 'Très satisfaisant'
'formSupport' => string 'Très satisfaisant'
'formRythme' => string 'Très satisfaisant'
'formDuree' => string 'Très satisfaisant'
'formPedago' => string 'Très satisfaisant'
'formDispo' => string 'Très satisfaisant'
'formOrga' => string 'Satisfaisant'
'eval' => string '9'
1 =>
array
'formationIntitule' => string 'Anglais'
'formNiveau' => string 'Satisfaisant'
'formAccueil' => string 'Très satisfaisant'
'formRespect' => string 'Satisfaisant'
'formContenu' => string 'Satisfaisant'
'formSupport' => string 'Satisfaisant'
'formRythme' => string 'Très satisfaisant'
'formDuree' => string 'Très satisfaisant'
'formPedago' => string 'Très satisfaisant'
'formDispo' => string 'Très satisfaisant'
'formOrga' => string 'Satisfaisant'
'eval' => string '9'
2 =>
array
'formationIntitule' => string 'Allemand'
'formNiveau' => string 'Satisfaisant'
'formAccueil' => string 'Très satisfaisant'
'formRespect' => string 'Satisfaisant'
'formContenu' => string 'Satisfaisant'
'formSupport' => string 'Satisfaisant'
'formRythme' => string 'Très satisfaisant'
'formDuree' => string 'Très satisfaisant'
'formPedago' => string 'Très satisfaisant'
'formDispo' => string 'Très satisfaisant'
'formOrga' => string 'Satisfaisant'
'eval' => string '9'

et ton même tableau 2,

Le résultat serait :

array
0 =>
array
'formationIntitule' => string Français'
'objectifPro2' => string 'Remise à niveau'
'objectifPro6' => string 'Autres'
'formNiveau' => string 'Satisfaisant'
'formAccueil' => string 'Satisfaisant'
'formRespect' => string 'Très satisfaisant'
'formContenu' => string 'Très satisfaisant'
'formSupport' => string 'Très satisfaisant'
'formRythme' => string 'Très satisfaisant'
'formDuree' => string 'Très satisfaisant'
'formPedago' => string 'Très satisfaisant'
'formDispo' => string 'Très satisfaisant'
'formOrga' => string 'Satisfaisant'
'eval' => string '9'
1 =>
array
'formationIntitule' => string 'Anglais'
'formNiveau' => string 'Satisfaisant'
'formAccueil' => string 'Très satisfaisant'
'formRespect' => string 'Satisfaisant'
'formContenu' => string 'Satisfaisant'
'formSupport' => string 'Satisfaisant'
'formRythme' => string 'Très satisfaisant'
'formDuree' => string 'Très satisfaisant'
'formPedago' => string 'Très satisfaisant'
'formDispo' => string 'Très satisfaisant'
'formOrga' => string 'Satisfaisant'
'eval' => string '9'

ou

array
0 =>
array
'formationIntitule' => string Français'
'formAccueil' => string 'Satisfaisant'
1 =>
array
'formationIntitule' => string 'Anglais'
'formAccueil' => string 'Très satisfaisant'

?

jouvrard, il y a 6 ans

Bonjour,

Désolé pour le temps de réponse, les vacances, tout ça... ;)

Bref, je souhaiterais garder toute la ligne du tableau 1 si elle remplie les conditions.

eltharin, il y a 6 ans

Bonjour,

Dans ce cas, regarde du coté de la fonction array_filter : https://www.php.net/manual/fr/function.array-filter.php.

Tu l'appliques à ton tableau 1, qui va dire en gros pour chaque élément je garde ou je supprime. Et là, tu fais tes vérifs par rapport à ton tableau 2.

jouvrard, il y a 6 ans

Ok merci, je vais regarder ça de près.
Meric!