IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Trier un tableau par rapport à un autre


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 231
    Points : 82
    Points
    82
    Par défaut Trier un tableau par rapport à un autre
    Bonjour à tous,

    J'ai ce tableau

    Array
    (
        [MARQUE] => marque1
        [REFCIAL] => reference
        [GTIN] => 1234567891234
    )
    que je souhaiterais trier par rapport à la valeur columnsOrder contenue dans ce tableau
    Array
    (
        [columns] => Array
            (
                [0] => Array
                    (
                        [columnsOrder] => 1000
                        [attributeCode] => sku
                        [columnName] => REFCIAL
                        [useLabel] => 
                    )
    
                [1] => Array
                    (
                        [columnsOrder] => 2000
                        [attributeCode] => marque
                        [columnName] => MARQUE
                        [useLabel] => 
                    )
    
                [2] => Array
                    (
                        [columnsOrder] => 3000
                        [attributeCode] => eancod
                        [columnName] => GTIN
                        [forcedValue] => 
                        [useLabel] => 
                    )
    
            )
    
    )
    Le résultat final serait
    Array
    (
        [REFCIAL] => reference
        [MARQUE] => marque1
        [GTIN] => 1234567891234
    )
    Je vois pas trop comment faire. Est-ce que vous avez une idée ?
    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    vous pouvez travailler avec les tableaux comme cela par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    	$donnees = [
    		"MARQUE" => "m",
    		"REFCIAL" => "r",
    		"GTIN" => "1234", 
    	];
     
    	$colonnes = [
    		[
    			"columnsOrder" => 2000,
    			"columnName" => "MARQUE",
    		],
    		[
    			"columnsOrder" => 3000,
    			"columnName" => "GTIN",
    		],
    		[
    			"columnsOrder" => 1000,
    			"columnName" => "REFCIAL",
    		],
    	];
     
     
    	// 1re étape : tri des colonnes si elle ne sont pas encore dans l'ordre
     
    	usort($colonnes, function ($e1, $e2) {
    		return $e1["columnsOrder"] - $e2["columnsOrder"];
    	});
     
     
    	// 2e étape : création du tableau avec les colonnes dans l'ordre
     
    	$donnees_triees = [];
     
    	foreach ($colonnes as $colonne) {
     
    		$cle = $colonne["columnName"];
     
    		if (isset($donnees[$cle])) {
    			$donnees_triees[$cle] = $donnees[$cle];
    		}
     
    	}

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 231
    Points : 82
    Points
    82
    Par défaut
    Parfait, merci pour la grosse piste

    J'ai adapté votre code à mon contexte (Symfony et je n'ai pas la main sur la structure des tableaux). Du coups cela donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            // Order mappgin with columnsOrder field
            usort($mapping[self::MAPPING_COLUMNS_KEY], function($a, $b) { return strcmp($a[self::MAPPING_COLUMN_ORDER_KEY], $b[self::MAPPING_COLUMN_ORDER_KEY]); });
            $item_order = [];
            foreach($mapping[self::MAPPING_COLUMNS_KEY] as $column) {
                $key = $column[self::MAPPING_COLUMN_NAME_KEY];
                if(isset($item[$key])) {
                    $item_order[$key] = $item[$key];
                }
            }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Trier une matrice par rapport à une autre
    Par LoVan dans le forum MATLAB
    Réponses: 7
    Dernier message: 23/07/2012, 09h10
  2. Trier un tableau par rapport aux dates
    Par charline33 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 21/04/2009, 09h58
  3. [Tableaux] classer un tableau par rapport à un autre
    Par Alexdezark dans le forum Langage
    Réponses: 1
    Dernier message: 13/06/2008, 12h33
  4. Trier un vecteur par rapport à un autre
    Par jinrs dans le forum MATLAB
    Réponses: 3
    Dernier message: 07/09/2007, 15h58
  5. Trier un tableau par rapport à un autre tableau
    Par deaven dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 02/05/2005, 09h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo