/ / Supprimer une entrée de tableau avec une ou plusieurs valeurs en double dans un tableau multidimensionnel - php

Supprimer une entrée de tableau avec une ou plusieurs valeurs en double dans un tableau multidimensionnel - php, arrays, multidimensional-array

Comment puis-je supprimer une entrée de tableau avec une ou plusieurs valeurs dupliquées dans un tableau multidimensionnel? Par exemple si j'ai:

array (size=4)
0 =>
array (size=3)
"food" => string "bread" (length=5)
"color" => string "white" (length=5)
"language" => string "php" (length=3)
1 =>
array (size=3)
"food" => string "rice" (length=4)
"color" => string "purple" (length=6)
"language" => string "c#" (length=2)
2 =>
array (size=3)
"food" => string "pasta" (length=5)
"color" => string "red" (length=3)
"language" => string "php" (length=3)
3 =>
array (size=3)
"food" => string "steak" (length=5)
"color" => string "yellow" (length=6)
"language" => string "ruby" (length=4)

Puisqu'il y a une entrée php dans array [2], je veux supprimer tout l'enregistrement pour pouvoir avoir

array (size=4)
0 =>
array (size=3)
"food" => string "bread" (length=5)
"color" => string "white" (length=5)
"language" => string "php" (length=3)
1 =>
array (size=3)
"food" => string "rice" (length=4)
"color" => string "purple" (length=6)
"language" => string "c#" (length=2)
2 =>
array (size=3)
"food" => string "steak" (length=5)
"color" => string "yellow" (length=6)
"language" => string "ruby" (length=4)

J'ai essayé ce code:

array_map("unserialize", array_unique(array_map("serialize", $array)));

et ça ne marche pas. Qu'est-ce que je fais mal?

Réponses:

0 pour la réponse № 1

Puisque vos objets sont tous différents (par exemple, ils ont tous des couleurs différentes), array_unique ne réduira pas le nombre d'éléments.

A la place, entrez les éléments de votre tableau language propriété: qui éliminera les doublons php entrées, puis reconvertit ce tableau associé en un tableau indexé:

foreach($array as $row) {
$result[$row["language"]] = $row;
}
$result = array_values($result);

0 pour la réponse № 2

La solution utilisant array_intersect et array_merge fonctions (couvrira les doublons pour toutes les clés):

$arr = [
["food" => "bread", "color" => "white", "language" => "php"],
["food" => "rice", "color" => "purple", "language" => "c#"],
["food" => "pasta", "color" => "red", "language" => "php"],
["food" => "steak", "color" => "yellow", "language" => "ruby"]
];

$values = [];  // auxiliary array
foreach ($arr as $k => $a) {
if (array_intersect($values, $a)){
unset($arr[$k]);  // removing the whole `entry` if it contains duplicates in any key
} else {
$values = array_merge($values, array_values($a));
}
}

print_r($arr);

Le résultat:

Array
(
[0] => Array
(
[food] => bread
[color] => white
[language] => php
)

[1] => Array
(
[food] => rice
[color] => purple
[language] => c#
)

[3] => Array
(
[food] => steak
[color] => yellow
[language] => ruby
)
)