Comment puis-je supprimer les valeurs en double d'un tableau multidimensionnel en PHP?
Exemple de tableau:
Array
(
[0] => Array
(
[0] => abc
[1] => def
)
[1] => Array
(
[0] => ghi
[1] => jkl
)
[2] => Array
(
[0] => mno
[1] => pql
)
[3] => Array
(
[0] => abc
[1] => def
)
[4] => Array
(
[0] => ghi
[1] => jkl
)
[5] => Array
(
[0] => mno
[1] => pql
)
)
serialize(array('a' => '1', 'b' => '1'))
différent deserialize(array('b' => '1', 'a' => '1'))
. Cette option échouera pour les tableaux utilisés commesets
ou(hash)maps
.Depuis 5.2.9, vous pouvez utiliser
array_unique()
si vous utilisez leSORT_REGULAR
drapeau comme ceci:Cela fait que la fonction compare les éléments pour l'égalité comme s'ils
$a == $b
étaient utilisés, ce qui est parfait pour votre cas.Production
Gardez à l'esprit, cependant, que la documentation indique:
la source
J'ai eu un problème similaire mais j'ai trouvé une solution 100% fonctionnelle.
la source
Autrement. Préserve également les clés.
la source
Les commentaires des utilisateurs sur la documentation array_unique () ont de nombreuses solutions à cela. Voici l'un d'entre eux:
Ceci provient de http://ca3.php.net/manual/en/function.array-unique.php#57202 .
la source
Si "supprimer les doublons" signifie "supprimer les doublons, mais en laisser un là", une solution pourrait être d'appliquer d'abord la
array_unique(...)
sur la "colonne d'identification" puis de supprimer dans le tableau d'origine toutes les clés qui ont été supprimées du tableau de colonnes. :Le résultat est:
la source
Cela supprimera les noms en double du tableau. unique par clé
la source
$array
les clés commencent à "0". Il est possible que$array
les clés commencent à un autre nombre si elles$array
résultent d'une manipulation préalable de tableau. Utilisezarray_values
pour réinitialiser les clés à "0"Solution simple:
la source
Utilisez simplement l'option SORT_REGULAR comme deuxième paramètre.
la source
si vous devez éliminer les doublons sur des clés spécifiques, comme un identifiant mysqli, voici une fonction simple
Points bonus Vous pouvez passer un tableau de clés et ajouter une foreach externe, mais ce sera 2x plus lent par clé supplémentaire.
la source
Un moyen très simple et logique pour Unique un tableau multidimensionnel est le suivant,
Si vous avez un tableau comme celui-ci:
utiliser
foreach
pour résoudre ce problème:cela vous donnera le résultat suivant:
et si vous voulez réorganiser l'ordre des clés,
Cette opération vous donnera des valeurs clés organisées comme ceci:
J'espère que cela effacera tout.
la source
si vous avez un tableau comme celui-ci:
(utilisateurs est le nom du tableau)
et vous souhaitez supprimer les doublons ... puis:
peut être une solution: P
la source
Une solution facile à lire, probablement pas la plus efficace:
la source
Comme les gens disent que
array_unique()
c'est très lent, voici un extrait que j'utilise pour un tableau multidimensionnel à un niveau.Référence du premier utilisateur à la note de la page de
array_unique()
fonction dans php.netla source
$output = array_map('unserialize', array_keys($result));
Beaucoup de personnes m'ont demandé comment créer un tableau multidimensionnel unique. J'ai pris référence à votre commentaire et cela m'aide.
Tout d'abord, merci à @jeromegamez @daveilers pour votre solution. Mais chaque fois que je donnais la réponse, ils me demandaient comment fonctionnaient ces «sérialiser» et «désérialiser». C'est pourquoi je veux partager la raison de cela avec vous afin que cela aide plus de gens à comprendre le concept derrière cela.
J'explique pourquoi nous utilisons «sérialiser» et «désérialiser» par étapes:
Étape 1: convertir le tableau multidimensionnel en tableau unidimensionnel
Pour convertir le tableau multidimensionnel en tableau unidimensionnel, commencez par générer une représentation en flux d'octets de tous les éléments (y compris les tableaux imbriqués) à l'intérieur du tableau. La fonction serialize () peut générer une représentation en flux d'octets d'une valeur. Pour générer une représentation en flux d'octets de tous les éléments, appelez la fonction serialize () à l'intérieur de la fonction array_map () en tant que fonction de rappel. Le résultat sera un tableau unidimensionnel quel que soit le nombre de niveaux du tableau multidimensionnel.
Étape 2: rendre les valeurs uniques
Pour rendre ce tableau unidimensionnel unique, utilisez la fonction array_unique ().
Étape 3: le rétablir dans le tableau multidimensionnel
Bien que le tableau soit désormais unique, les valeurs ressemblent à une représentation de flux d'octets. Pour le rétablir dans le tableau multidimensionnel, utilisez la fonction unserialize ().
Merci encore pour tout ça.
la source
Une alternative à la sérialisation et unique
* /
la source
Si vous avez un tableau comme celui-ci
et vous voulez obtenir des tableaux comme celui-ci:
ou
un code suivant peut aider
la source
J'ai beaucoup réfléchi à ce problème et j'ai déterminé que la solution optimale devait suivre deux règles.
Dans cet esprit et compte tenu de toutes les bizarreries de PHP, voici la solution que j'ai trouvée. Contrairement à certaines des autres réponses, il a la possibilité de supprimer des éléments en fonction de la ou des clés que vous souhaitez. Le tableau d'entrée devrait être des touches numériques.
Le seul inconvénient est que les clés ne sont pas en ordre à la fin de l'itération. Ce n'est pas un problème si vous n'utilisez ensuite que des boucles foreach, mais si vous devez utiliser une boucle for, vous pouvez mettre
$input = array_values($input);
après ce qui précède pour renuméroter les clés.la source
Sur la base de la réponse marquée comme correcte, en ajoutant ma réponse. Petit code ajouté juste pour réinitialiser les indices-
la source