Comparaison de tableau (array)

Signaler
Messages postés
3
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
23 février 2009
-
Messages postés
1
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
11 mai 2009
-
Bonjour,

Je cherche une fonction PHP qui puisse me dire dans un tableau ne contenant que des valeurs numériques celles qui sont manquante et me le sortir dans un autre tableau.

Déjà j'aimerais savoir si ça existe ou si je vais devoir me faire la fonction "a la main".

Merki a ceux qui oseront me répondre : )
A voir également:

3 réponses

Messages postés
3
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
23 février 2009

Ha ! j'oubliais.

Je ne veux que les valeurs manquantes dans un intervalle spécifique.

Exemple : tableau( 3, 5, 8) la fonction doit me retourner : tableau( 4, 6, 7).

Voila j'espère que c'est pas trop confus (faut m'excuser c'est lundi et j'ai pas les idées claires :P )
Messages postés
3
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
23 février 2009

Bon je n'ai pas trouvé de fonction ni de réponses je me suis donc auto-répondu :)





Je poste la soluce que j'ai trouver au cas ou quelqu'un en ai besoin.





Fonction de recherche de valeur manquante dans un tableau d'entier (positif ou négatif) :









/**************************************************************************************/





/*                                                                                    */





/*        Fonction de recherche de nombre manquant dans un tableau (array)    */





/*                                                                                    */





/*        Description :                                                               */





/*        -------------                                                               */





/*                            Cette fonction prend en entrée un tableau (array),     */





/*                            tri celui ci par ordre croissant et retourne            */





/*                            toutes les valeurs manquantes dans l'intervalle        */





/*                            spécifié par la valeur maximum et minimum du            */





/*                            tableau.                                                */





/*                                                                                    */





/*        Parametre accepté :                                                         */





/*                                    Un tableau (array) d'entier                     */





/*                                                                                    */





/*        Retourne :                                                                  */





/*                    Un tableau (array) d'entier                                     */





/*                                                                                    */





/**************************************************************************************/






function
Cherche_Nbr_Manquant($tab_1)


{




/* Tri des valeurs par ordre croissant */



    sort($tab_1) ;


   




/* Récupération de la valeur la plus haute dans la variable $val_max





    qui est la borne maximum de mon intervalle */



    $val_max= 0 ;                      // J'initialise une variable a zéro


    foreach ($tab_1as$ind => $val) // Je parcours mon tableau


    {


        if ($val > $val_max)            // Je compare si la valeur du tableau est plus grande que ma variable $val_max


        {                              // si c'est le cas alors ...


            $val_max = $val ;               // ... cette valeur devient la nouvelle valeur de $val_max pour la comparaison


        }


    }                               // Je boucle jusqu'à avoir parcouru tout mon tableau




/* Remise a zéro du pointeur de tableau */



    reset($tab_1) ;






/* Récupération de la valeur la plus basse dans la variable $val_min





    qui est la borne minimum de mon intervalle */



    $val_min = $val_max ;               // J'initialise ma variable avec la valeur maximum de mon tableau


    foreach ($tab_1as$ind = > $val) // Je parcours mon tableau


    {


        if ($val_min > = $val)           // Je compare si la valeur du tableau est plus petite que ma variable $val_min


        {                               // si c'est le cas alors ...


            $val_min = $val ;               // ... cette valeur devient la nouvelle valeur de $val_min pour la comparaison


        }                                  


    } // je boucle jusqu'à avoir parcouru tout mon tableau




/* Remise a zéro du pointeur de tableau */



    reset($tab_1) ;






/* Déclaration du tableau a renvoyer */



    $tab2 = array() ;






/* Le but ensuite est de partir de la borne minimum du tableau d'ajouter "1" a la valeur minimum et de comparer





    avec la valeur suivante si cette valeur est différente ou pas. Si cette valeur est différente alors elle n'est





    pas dans mon tableau sinon elle y est et je pointe dessus. */






/* Définition et initialisation des variables pour la comparaison */



    $val_1 = $tab_1[0] ;      // Variable_1 qui va s'incrémenter initialisée a la valeur de la borne mini (indice 0)


    $i = 1 ;                 // Indice du tableau qui va s'incrémenter initialisé l'indice 1 


    $val_2 = $tab_1[$i] ; // Variable_2 qui prendra les différentes valeurs successives du tableau


           


    for ($t_i = $val_min ; $t_i < $val_max ; $t_i ++)    // Boucle de parcours du tableau


    {


        $val_1 ++ ;                // J'incrémente ma variable_1


        if ($val_1 != $val_2)      // Si variable_1 est différente de variable_2


        {                          // Alors ça veux dire que ma variable_1 n'est pas dans le tableau


            $tab_2[] = $val_1 ; // Donc je place la valeur de variable_1 dans mon tableau de sortie


        }                                         


        else                        // Sinon    variable_1 est égale a variable_2                       


        {                              // Alors ça veux dire que ma variable_1 est dans le tableau


            $i ++ ;                    // Donc j'incrémente l'indice du tableau


            $val_2 = $tab_1[$i] ;      // Je place la valeur du nouvel indice dans variable_2


        }                                 


    }   // je boucle jusqu'à avoir parcouru tout mon tableau




/* Remise a zéro du pointeur de tableau */



    reset($tab_1) ;






/* Je retourne le tableau remplis avec les nombres manquant */


    return$tab_2 ;


}       

Il y a plus de commentaire que de code :P

Mais comme je débute je préfère en mettre plein sinon je sais plus ou j'en suis lorsque je relis

Je suis persuadé qu'il y a plus simple. Mais en attendant cette solution fonctionne a merveille.

Je vais essayer de simplifier cet aprém.
Messages postés
1
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
11 mai 2009

Il y a bien plus simple cher ami : array_diff(), qui compare deux tableaux et recrache un troisième array qui comprend les valeurs que les deux tableaux n'ont pas en commun.

Vu le nombre de fonctions natives pour manipuler les tableaux en PHP, il vaut mieux toujours se dire "je suis sûr(e) qu'une fonction php peut faire ce que je veux". C'est comme ça que je fonctionne, et j'ai toujours trouvé mon bonheur sur php.net... Rien ne sert de ré-inventer la roue! ;)