Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/09/2011, 16h49   #1
Membre du Club
 
Avatar de stomerfull
 
Inscription : septembre 2005
Messages : 243
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 243
Points : 42
Points : 42
Par défaut Doublons tableau multi-dimension

Bonjour à tous , J'ai un tableau de la forme
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Array
(
    [0] => Array
        (
            [0] => 12984
            [1] => 13474
            [2] => 13045
        )[1] => Array
        (
            [0] => 12984
            [1] => 13474
            [2] => 13045
        )[2] => Array
        (
            [0] => 12984
            [1] => 10121
 
        )
 
)
avec cette methode j'ai réussi à dedoublonner le tableau
Code :
1
2
3
4
5
6
7
8
9
10
11
12
$arr = array(
  array('test', 'test'),
  array('foo', 'bar'),
  array('test', 'test'),
  array('foo', 'bar'),
);
 
$arr = array_map('implode', $arr, array_fill(0, count($arr), '|'));
 
$arr = array_unique($arr);
 
$arr = array_map('explode', array_fill(0, count($arr), '|'), $arr);var_dump($arr);
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Array
(
    [0] => Array
        (
            [0] => 12984
            [1] => 13474
            [2] => 13045
        )[1] => Array
        (
            [0] => 12984
            [1] => 10121
 
        )
 
)
le soucis c'est que j'ai 12984 comment puis-je supprimer ça dans le tableau car c'est encore un doublons. Merci pour votre conseil
stomerfull est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 19h17   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Et ça ne te dérange pas de casser l'indexage ?

Si oui alors tu peux faire :


Code :
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
<?php
 
$data = array(
    array('Jaune', 'Vert', 'Bleu'),
    array('Marron', 'Violet', 'Vert', 'Noir'),
    array('Bleu', 'Vert', 'Noir', 'Vert'),
    array('Noir', 'Pourpre')
) ;
 
 
$final = array( ) ;
$all = array( ) ;
foreach ( $data as $row ) {
    $current = array( ) ;
    foreach ( $row as $item ) {
        if ( ! in_array($item, $all) ) {
            $current[ ] = $item ;
            $all[ ] = $item ;
        }
    }
    if ( ! empty($current) ) {
        $final[ ] = $current ;
    }
}
 
header('Content-Type: text/plain') ;
print_r($data) ;
print_r($final) ;
Code :
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
Array
(
    [0] => Array
        (
            [0] => Jaune
            [1] => Vert
            [2] => Bleu
        )
 
    [1] => Array
        (
            [0] => Marron
            [1] => Violet
            [2] => Vert
            [3] => Noir
        )
 
    [2] => Array
        (
            [0] => Bleu
            [1] => Vert
            [2] => Noir
            [3] => Vert
        )
 
    [3] => Array
        (
            [0] => Noir
            [1] => Pourpre
        )
 
)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Array
(
    [0] => Array
        (
            [0] => Jaune
            [1] => Vert
            [2] => Bleu
        )
 
    [1] => Array
        (
            [0] => Marron
            [1] => Violet
            [2] => Noir
        )
 
    [2] => Array
        (
            [0] => Pourpre
        )
 
)
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 10h06   #3
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Une variante qui préserve les clés

Code :
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
<?php
 
$a = array(
    array(12984, 13474, 13045),
    array(12984, 13474, 13045),
    array(12984, 10121),
    10121,
    25,
);
 
function snafu($value)
{
    if (is_array($value)){
        return TRUE;
    }
 
    static $buffer = array();
 
    if (in_array($value, $buffer)) {
        return FALSE;
    }
    else {
        $buffer[] = $value;
        return TRUE;
    }
}
 
foreach($a as $key=>$value){
    if (is_array($value))
        $a[$key] = array_filter($value, 'snafu');
}
$a = array_filter($a, 'snafu');
 
var_dump($a);
__________________
  • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
  • Merci d'utiliser les balises de code (# dans l'éditeur)
  • Si votre problème est réglé, merci d'utiliser le bouton
S.N.A.F.U
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h01.


 
 
 
 
Partenaires

Hébergement Web