Dédoublonnage tableau multi avec array_unique() ?

Dédoublonnage tableau multi avec array_unique() ? - PHP - Programmation

Marsh Posté le 28-11-2008 à 16:07:41    

Salut j'ai un tableau multi qui a la structure ci dessous.
j'aimerai sortir le tableau dédoublonné sur la valeur du champs Price.
 

Code :
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [Price] => 110.00
  6.         )
  7. [1] => Array
  8.         (
  9.             [Price] => 110.00
  10.         )
  11. [2] => Array
  12.         (
  13.             [Price] => 113.00
  14.         )
  15. )


 
QQun aurait une soluce ?

Reply

Marsh Posté le 28-11-2008 à 16:07:41   

Reply

Marsh Posté le 28-11-2008 à 16:18:05    

Quel est l'utilité d'avoir cette dimension en trop à ton tableau?

Reply

Marsh Posté le 28-11-2008 à 16:26:00    

J'ai fait simple mais normalement ca donnerai ca :
 

Code :
  1. Array
  2. (
  3. [0] => Array
  4. (
  5.  [Price] => 110.00
  6.  [Name] => Blop
  7. )
  8. [1] => Array
  9. (
  10.  [Price] => 110.00
  11.  [Name] => Gus
  12. )
  13. [2] => Array
  14. (
  15.  [Price] => 113.00
  16.  [Name] => Blup
  17. )
  18. )

Reply

Marsh Posté le 28-11-2008 à 16:40:30    

Solution rapide :o

 
Code :
  1. $a = array(
  2.             array('Price' => 110.00,'Name' => 'Blop'),
  3.             array('Price' => 113.00,'Name' => 'Blup'),
  4.             array('Price' => 110.00,'Name' => 'Blip')
  5.         );
  6.  
  7. $b = array_filter($a,'dedoublonne');
  8.  
  9. function dedoublonne($item)
  10. {
  11.     static $prices = array();
  12.     
  13.     if(!isset($prices[$item['Price']]))
  14.     {
  15.         $prices[$item['Price']] = $item['Price'];
  16.         return true;
  17.     }
  18.     return false;
  19. }
  20.  
  21. /*
  22. Retourne :
  23. Array
  24. (
  25.    [0] => Array
  26.        (
  27.            [Price] => 110
  28.            [Name] => Blop
  29.        )
  30.  
  31.    [1] => Array
  32.        (
  33.            [Price] => 113
  34.            [Name] => Blup
  35.        )
  36. )
  37.  
  38.  
  39. */



Message édité par Alisteroid le 28-11-2008 à 16:41:06
Reply

Marsh Posté le 28-11-2008 à 16:47:47    

Ca marche impec
merci bcp :)

Reply

Marsh Posté le 28-11-2008 à 16:52:12    

Sans utilisation de fonction native (et plus performant):

Code :
  1. $prices = array();
  2. $nb_elements = count($a);
  3. for($i=0;$i<$nb_elements;$i++)
  4. {
  5.     if(!isset($prices[$a[$i]['Price']]))
  6.     {
  7.         $prices[$a[$i]['Price']] = $a[$i]['Price'];
  8.     }
  9.     else
  10.     {
  11.         unset($a[$i]);
  12.     }
  13. }


C'est un peu moins performant que les deux dernieres solutions en utilisant un foreach, mais on parle d'1 à 2 centièmes de s (pour un total de 0.30s) pour un tableau à 10000 entrées. :D

 

array_filter : 0.31s
for : 0.28s
foreach : 0.32s

 

Bref bench inutile :D


Message édité par Alisteroid le 28-11-2008 à 16:53:25
Reply

Marsh Posté le 28-11-2008 à 16:54:08    

:D

Reply

Sujets relatifs:

Leave a Replay

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