[PHP] arry_unique multidimentional + index d'array

arry_unique multidimentional + index d'array [PHP] - PHP - Programmation

Marsh Posté le 24-01-2011 à 12:33:29    

Bonjour,
 
j'ai un tableau :  

Code :
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => coucou/1234
  6.             [1] => coucou/1234
  7.             [2] => blalal/coucou/1234
  8.             [3] => coucou/9876
  9.             [4] => coucou/9876
  10.             [5] => coucou/4567
  11.             [6] => blalal/coucou/9876
  12.             [7] => bla/coucou/4567       
  13.         )
  14.     [1] => Array
  15.         (
  16.             [0] => coucou
  17.             [1] => coucou
  18.             [2] => blalal
  19.             [3] => coucou
  20.             [4] => coucou
  21.             [5] => coucou
  22.             [6] => blalal
  23.             [7] => bla
  24.         )
  25.     [2] => Array
  26.         (
  27.             [0] => 1234
  28.             [1] => 1234
  29.             [2] => 1234
  30.             [3] => 9876
  31.             [4] => 9876
  32.             [5] => 4567
  33.             [6] => 9876
  34.             [7] => 4567           
  35.         )
  36.     [3] => Array
  37.         (
  38.             [0] =>
  39.             [1] =>
  40.             [2] =>
  41.             [3] =>
  42.             [4] =>
  43.             [5] =>
  44.             [6] =>
  45.             [7] =>           
  46.         )
  47.     [4] => Array
  48.         (
  49.             [0] =>
  50.             [1] =>
  51.             [2] =>
  52.             [3] =>
  53.             [4] =>
  54.             [5] =>
  55.             [6] =>
  56.             [7] =>           
  57.         )
  58. )


Je souhaite en faire un array_unique en regardant les valeurs du Array ( [2] => Array
un truc du genre :

Code :
  1. $monarray=array_unique_custom($monarray[2]);


et donc ça doit me sortir un array_unique en enlevant les valeurs dépendantes de cet index :  

Code :
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => coucou/1234           
  6.             [1] => coucou/9876           
  7.             [2] => coucou/4567                 
  8.         )
  9.     [1] => Array
  10.         (
  11.             [0] => coucou         
  12.             [1] => coucou
  13.             [2] => coucou                     
  14.         )
  15.     [2] => Array
  16.         (
  17.             [0] => 1234           
  18.             [1] => 9876           
  19.             [2] => 4567                 
  20.         )
  21.     [3] => Array
  22.         (
  23.             [0] =>
  24.             [1] =>
  25.             [2] =>                 
  26.         )
  27.     [4] => Array
  28.         (
  29.             [0] =>
  30.             [1] =>
  31.             [2] =>                     
  32.         )
  33. )


Je sais pas si c'est clair ?  
Il doit y avoir plein d'exemples mais j'ai du mal à les trouver...
En plus j'ai beaucoup de valeur et il me faudrait la fonction/méthode la plus performante/rapide.
 
Merci


Message édité par flashub le 24-01-2011 à 13:12:00
Reply

Marsh Posté le 24-01-2011 à 12:33:29   

Reply

Marsh Posté le 24-01-2011 à 14:02:55    

avec la méthode in_array(<valeur>, <tableau> ) et une boucle, tu devrais t'en sortir :)


---------------
:o
Reply

Marsh Posté le 24-01-2011 à 16:59:16    

Ydalb a écrit :

avec la méthode in_array(<valeur>, <tableau> ) et une boucle, tu devrais t'en sortir :)


il y aurait toujours moyen de faire comme tu le dis mais ce qui est compliqué c'est que c'est uniquement dans l'Array [2] que je souhaite comparer les valeurs et supprimer les autres valeurs des Array qui en dépendes Array[0],Array[1],... De sorte que j'ai bien $monarray[2][1]=9876 et $monarray[0][1]=coucou/9876 (ou $monarray[0][1]=blalal/coucou/9876 peu importe)
Ce doit être courant comme demande mais je n'arrive pas à trouver. Et puis je cherche la fonction/méthode la plus performante/rapide. Avec le minimum de boucle.

Reply

Marsh Posté le 24-01-2011 à 20:32:42    

j'ai déjà trouvé ces deux lignes :  
$monarray[2]=array_unique($monarray[2]);
$monarray[2]=array_values($monarray[2]);.
qui donne :  
# Array
# (
#     [0] => Array
#         (
#             [0] => coucou/1234
#             [1] => coucou/1234
#             [2] => blalal/coucou/1234
#             [3] => coucou/9876
#             [4] => coucou/9876
#             [5] => coucou/4567
#             [6] => blalal/coucou/9876
#             [7] => bla/coucou/4567        
#         )
#
#     [1] => Array
#         (
#             [0] => coucou
#             [1] => coucou
#             [2] => blalal
#             [3] => coucou
#             [4] => coucou
#             [5] => coucou
#             [6] => blalal
#             [7] => bla
#         )
#
#     [2] => Array
#         (
#             [0] => 1234            
#             [1] => 9876            
#             [2] => 4567                  
#         )
#    # [3] => Array
#         (
#             [0] =>
#             [1] =>
#             [2] =>
#             [3] =>
#             [4] =>
#             [5] =>
#             [6] =>
#             [7] =>            
#         )
#
#     [4] => Array
#         (
#             [0] =>
#             [1] =>
#             [2] =>
#             [3] =>
#             [4] =>
#             [5] =>
#             [6] =>
#             [7] =>            
#         )
#
# )
 
Je suis sûr qu'une fonction existe pour faire en sorte que tout soit cohérent... Pas trouver.
idées ?

Reply

Marsh Posté le 24-01-2011 à 21:50:53    

flashub a écrit :

j'ai déjà trouvé ces deux lignes :  
$monarray[2]=array_unique($monarray[2]);
$monarray[2]=array_values($monarray[2]);.


bon j'ai trouvé une façon de faire en relisant mon post précédent !  
 

Code :
  1. $notot=count($monarray[0]);
  2.     $monarray[2]=array_unique($monarray[2]);
  3.     for($i=0;$i<=$notot;$i++) {
  4.       if (empty($monarray[2][$i])) {
  5.      
  6.           unset ($monarray[0][$i]);
  7.           unset ($monarray[1][$i]);
  8.           unset ($monarray[3][$i]);
  9.           unset ($monarray[4][$i]);
  10.       }
  11.     }
  12.     $monarray=array_values($monarray);


J'avais pas vraiment cherché, je reste persuader qu'il existe une Fonctions sur les tableaux
mais ça marche comme ça.
si je trouve une meilleure écriture ou La fonction, je reviendrai ici compléter ce post.  
 
Merci Ydalb tu m'as permis d'avancer quand même.
 :)  
Note : je préfère foreach mais j'ai essayé vite fait : foreach($monarray as $key => $i) {    // mais ça n'a pas fonctionné

Reply

Marsh Posté le 25-01-2011 à 12:35:42    

Au plaisir :)


---------------
:o
Reply

Marsh Posté le 26-01-2011 à 17:26:26    

C'est bien mais c'est pas suffisant...
Y-a-t'il un moyen tout d'abord de supprimer les arrays vides du tableau ?
Peut-être faut-il que j'explose $monarray en plusieurs et que je fasse la correspondance des deux pour ne garder que :  

Code :
  1. Array
  2. (
  3.      [0] => Array
  4.          (
  5.              [0] => coucou/1234
  6.              [1] => coucou/1234
  7.              [2] => blalal/coucou/1234
  8.              [3] => coucou/9876
  9.              [4] => coucou/9876
  10.              [5] => coucou/4567
  11.              [6] => blalal/coucou/9876
  12.              [7] => bla/coucou/4567       
  13.          )
  14.     [1] => Array
  15.          (
  16.              [0] => 1234
  17.              [1] => 1234
  18.              [2] => 1234
  19.              [3] => 9876
  20.              [4] => 9876
  21.              [5] => 4567
  22.              [6] => 9876
  23.              [7] => 4567         
  24.          )
  25. )


Je suis perdu pour rendre ce tableau exploitable quelque soit le nombre d'array et la position des valeurs que je dois rendre unique...


Message édité par flashub le 26-01-2011 à 17:28:44
Reply

Sujets relatifs:

Leave a Replay

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