Probleme avec array_diff

Probleme avec array_diff - PHP - Programmation

Marsh Posté le 23-05-2003 à 12:12:48    

J'ai 2 tableaux, le premier contient :
 

Code :
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => -1
  6.             [1] => SYSFONCTION
  7.             [2] =>
  8.         )
  9.     [1] => Array
  10.         (
  11.             [0] => 1
  12.             [1] => ADMINISTRATEUR
  13.             [2] =>
  14.         )
  15.     [2] => Array
  16.         (
  17.             [0] => 2
  18.             [1] => ACCOUNTING DEPARTMENT
  19.             [2] =>
  20.         )
  21.     [3] => Array
  22.         (
  23.             [0] => 26
  24.             [1] => TOP MANAGEMENT
  25.             [2] =>
  26.         )
  27.     [4] => Array
  28.         (
  29.             [0] => 27
  30.             [1] => SOFTWARE DEVELOPMENT
  31.             [2] =>
  32.         )
  33.     [5] => Array
  34.         (
  35.             [0] => 28
  36.             [1] => TestFunction
  37.             [2] =>
  38.         )
  39. )

 
 
Dans l'autre :

Code :
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => 1
  6.             [1] => ADMINISTRATEUR
  7.             [2] =>
  8.         )
  9. )


 
 
Je lis la definition de array_diff
 array_diff() retourne un tableau qui contient toutes les valeurs du tableau array1  qui sont absentes de tous les autres arguments. Notez que les clés sont préservées.  
 
 
Maintenant je fais un $ARRAY = array_diff($TAB1,$TAB2) ;
 
Je m'attend au resultat :
 

Code :
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => -1
  6.             [1] => SYSFONCTION
  7.             [2] =>
  8.         )
  9.     [1] => Array
  10.         (
  11.             [0] => 2
  12.             [1] => ACCOUNTING DEPARTMENT
  13.             [2] =>
  14.         )
  15.     [2] => Array
  16.         (
  17.             [0] => 26
  18.             [1] => TOP MANAGEMENT
  19.             [2] =>
  20.         )
  21.     [3] => Array
  22.         (
  23.             [0] => 27
  24.             [1] => SOFTWARE DEVELOPMENT
  25.             [2] =>
  26.         )
  27.     [4] => Array
  28.         (
  29.             [0] => 28
  30.             [1] => TestFunction
  31.             [2] =>
  32.         )
  33. )
  34. [/cpp ]
  35. Mais j'ai
  36. [cpp]
  37. Array
  38. (
  39. )


 
 
En faisant le topic je me suis rendu compte que cela ne pouvait pas marcher car [1] est different de [0] mais pourquoi me donne t-il un tableau vide plutot que tout le tableau en entier ?
 
 
PS : Joce ça commence à m'enerver le fait d'inserer un smiley/code et de me voir revenir en haut du Textarea quand on est sous un navigateur Mozilla -like. Je sais que c possible de regler ce probleme, et c pas un troll


Message édité par samuelp le 23-05-2003 à 12:14:00
Reply

Marsh Posté le 23-05-2003 à 12:12:48   

Reply

Marsh Posté le 23-05-2003 à 12:21:29    

la comparaison se fait au sens d'une chaine de caractère ;)
 

Note : Deux éléments sont considérés comme égaux si et seulement si (string) $elem1 === (string) $elem2. En clair : lorsque la représentation en chaîne de caractères est identique.

Reply

Marsh Posté le 23-05-2003 à 12:22:23    

dropsy a écrit :

la comparaison se fait au sens d'une chaine de caractère ;)
 

Note : Deux éléments sont considérés comme égaux si et seulement si (string) $elem1 === (string) $elem2. En clair : lorsque la représentation en chaîne de caractères est identique.




Je sens bien que je vais devoir me taper ma propre fonction moi !

Reply

Marsh Posté le 23-05-2003 à 12:55:26    

samuelp a écrit :


Je sens bien que je vais devoir me taper ma propre fonction moi !


 
mais pourquoi n'utilises tu pas la fonction   :??:  
 

Code :
  1. compare_myarrays($var1, $var2);


 
 
 :)

Reply

Marsh Posté le 23-05-2003 à 13:02:22    

en fait si j'ai bien compris comment fonctionnait la fonction ( car je ne m'en suis jamais servi) et ce que tu voulais faire ....
tu peux t'en servir afin de ne faire qu'une boucle au lieu d'un boucle imbriquée, non  
 
 

Code :
  1. for($i=0; $i<(count($TAB)); $i++)
  2. {
  3. $result=array_diff($TAB1[$i],$TAB2[$i]) ;
  4. }


 
 [:spamafote]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 23-05-2003 à 13:42:02    

__canard__ a écrit :


 
mais pourquoi n'utilises tu pas la fonction   :??:  
 

Code :
  1. compare_myarrays($var1, $var2);


 
 
 :)  


 
ça fait deux fois, tu veux te foutre de ma gueule c'est ça ?

Reply

Marsh Posté le 23-05-2003 à 13:43:32    

simogeo a écrit :

en fait si j'ai bien compris comment fonctionnait la fonction ( car je ne m'en suis jamais servi) et ce que tu voulais faire ....
tu peux t'en servir afin de ne faire qu'une boucle au lieu d'un boucle imbriquée, non  
 
 

Code :
  1. for($i=0; $i<(count($TAB)); $i++)
  2. {
  3. $result=array_diff($TAB1[$i],$TAB2[$i]) ;
  4. }


 
 [:spamafote]  


 
Bah non j'ai du faire hyper compliqué : Puisque les tableaux sont de tailles variables.
 
 Je me demande si ma fonction peut etre amelioree :
 

Code :
  1. function truncate_array_double_recursive($varArray1,$varArray2,$varIndex=0)
  2. {
  3. for ($counter=0;$counter<count($varArray2);$counter++)
  4. {
  5.  $arraybackup[$counter]=$varArray2[$counter][$varIndex] ;
  6. }
  7. $counter = 0 ;
  8. $array_backup = array() ;
  9. for ($counter_one=0;$counter_one<count($varArray1);$counter_one++)
  10. {
  11.  for ($counter_two=0;$counter_two<count($arraybackup);$counter_two++)
  12.  {
  13.   if (!(in_array($arraybackup[$counter_two],$varArray1[$counter_one])))
  14.   {
  15.    //echo "toto" ;
  16.    for ($counter_three=0;$counter_three<count($varArray1[$counter_one]);$counter_three++)
  17.    {
  18.     $array_backup[$counter][$counter_three]=$varArray1[$counter_one][$counter_three] ;
  19.    }
  20.    $counter ++;
  21.   }
  22.  }
  23. }
  24. return $array_backup ;
  25. }

Reply

Marsh Posté le 23-05-2003 à 18:15:58    

samuelp a écrit :


 
ça fait deux fois, tu veux te foutre de ma gueule c'est ça ?


[:psywalk]

Reply

Marsh Posté le 09-12-2007 à 12:16:27    

Je crois que l'on peut simplifier comme ça
 
$j = 0;
foreach($p_TAB1 as $key_1){
 $v_flag = 0;
 foreach($p_TAB2 as $key_2){
  if($key_1[0] == $key2_2[0]) $v_flag = 1;
 }
 if($v_flag == 0){
  $p_data[$j][0] =$key_1[0];
  $p_data[$j][1] =$key_1[1];
  $j++;
 }
}


---------------
Oderint Dum Metuant
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed